Git的撤销操作
备注:本文修订于2022年10月31日
1、Git的工作流程
Git是目前世界上最先进的分布式版本控制系统。正常情况下,我们的工作流程就是使用下面的3个命令,如下所示:
# 把所有文件放入暂存区
git add .
# 把所有文件从暂存区提交进本地仓库
git commit -m "comment"
# 把所有文件从本地仓库推送进远程仓库
git push
对应下图中的3个箭头线:
以上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