Git 撤销操作

1、Git的工作流程

Git是目前世界上最先进的分布式版本控制系统。正常情况下,我们的工作流程就是使用下面的3个命令,如下所示:

# 把所有文件放入暂存区
git add . 

# 把所有文件从暂存区提交进本地仓库
git commit -m "comment"

# 把所有文件从本地仓库推送进远程仓库
git push

对应下图中的3个箭头线:

git-sample.png

以上4个区,进入每一个区成功之后会产生一个状态,再加上最初始的一个状态,一共是5种状态。以下我们把这5种状态分别命名为:

未修改(Origin)
已修改(Modified)
已暂存(Staged)
已提交(Committed)
已推送(Pushed)

2、Git 撤销修改

2.1 已修改,未暂存

如果我们只是在编辑器里修改了文件,但还没有执行git add .,这时候我们的文件还在工作区,并没有进入暂存区,我们可以用:git checkout .来进行撤销操作。

2.2 已暂存,未提交

你已经执行了git add .,但还没有执行git commit -m "comment"。这时候你意识到了错误,想要撤销,你可以执行:

git reset --mixed
git checkout .

git reset --mixed只是把修改退回到了git add .之前的状态,也就是说文件本身还处于已修改未暂存状态,你如果想退回未修改状态,还需要执行git checkout .

2.3 已提交,未推送

你的手太快,你既执行了git add .,又执行了git commit,这时候你的代码已经进入了你的本地仓库,然而你后悔了,怎么办?不要着急,还有办法。

git reset --hard orgin/master

orgin/master表示远程仓库的分支,既然本地仓库被污染了,那么使用远程仓库的来重置一下。

2.4 已推送

很不幸,你的手实在是太快了,你既git add了,又git commit了,并且还git push了,这时你的代码已经进入远程仓库。如果你想恢复的话,还好,由于你的本地仓库和远程仓库是等价的,你只需要先恢复本地仓库,再强制push到远程仓库就好了:

git reset --hard HEAD^
git push -f