基本概念
3个步骤
正常情况下,我们的工作流就是3个步骤,对应上图中的3个箭头线:
git add .
git commit -m “comment”
git push
- git add .把所有文件放入暂存区;
- git commit把所有文件从暂存区提交进本地仓库;
- git push把所有文件从本地仓库推送进远程仓库。
4个区
git之所以令人费解,主要是它相比于svn等等传统的版本管理工具,多引入了一个暂存区(Stage)的概念,就因为多了这一个概念,而使很多人疑惑。其实,在初学者来说,每个区具体怎么工作的,我们完全不需要关心,而只要知道有这么4个区就够了:
● 工作区(Working Area)
● 暂存区(Stage)
● 本地仓库(Local Repository)
● 远程仓库(Remote Repository)
5种状态
以上4个区,进入每一个区成功之后会产生一个状态,再加上最初始的一个状态,一共是5种状态。以下我们把这5种状态分别命名为:
● 未修改(Origin)
● 已修改(Modified)
● 已暂存(Staged)
● 已提交(Committed)
● 已推送(Pushed)
检查修改
// 已修改,未暂存
git diff
只检查我们的工作区和暂存区之间的差异
// 已暂存,未提交
git diff --cached
暂存区和本地仓库之间的差异
// 已提交,未推送
git diff master origin/master
本地仓库和远程仓库之间的差异
撤销修改
已修改,未暂存
这时候我们的文件还在工作区,并没有进入暂存区,我们可以用:
git checkout .
或者
git reset –hard一对反义词 git add .的反义词是git checkout .。做完修改之后,如果你想向前走一步,让修改进入暂存区,就执行git add .,如果你想向后退一步,撤销刚才的修改,就执行git checkout .。
已暂存,未提交
你已经执行了git add .,但还没有执行git commit -m “comment”。这时候你意识到了错误,想要撤销,你可以执行:
git reset
git checkout .
或者
git reset –hardgit reset只是把修改退回到了git add .之前的状态,也就是说文件本身还处于已修改未暂存状态,你如果想退回未修改状态,还需要执行git checkout .。
或许你已经注意到了,以上两个步骤都可以用同一个命令git reset –hard来完成。是的,就是这个强大的命令,可以一步到位地把你的修改完全恢复到未修改的状态。
已提交,未推送
既执行了git add .,又执行了git commit,这时候你的代码已经进入了你的本地仓库
git reset –hard origin/master
从远程仓库把代码取回来吧。已推送
你既git add了,又git commit了,并且还git push了,这时你的代码已经进入远程仓库。如果你想恢复的话,还好,由于你的本地仓库和远程仓库是等价的,你只需要先恢复本地仓库,再强制push到远程仓库就好了:
git reset –hard HEAD^
git push -f
Reference
- www.fengerzh.com/git-reset