Git的各种撤销操作

使用版本控制工具Git最大的好处就是,发生错误操作、修改后可以恢复到原来最后一次正确的状态

撤销git push操作

运行git push后,会将新的commit提交到远程仓库。可以使用git revert来撤销操作

1
git revert <SHA>

git revert会创建一个新的commit,其中的修改与<SHA>commit相反,以此来达到撤销之前操作的目的。

修改commit信息

当使用git commit -m "Fxies bug #42"提交了一个commit后发现信息写错了,可以使用git commit --amend -m "Fixes bug #42"来修改。这条命令会将最近提交的commit信息修改

撤销当前编辑的内容

当编辑了代码并保存后,发现写错了,但是没有commit,想要把文件恢复成原来的样子,使用

1
git checkout -- <bad filename>

<bad filename>可以是分支名或指定的SHA,默认下会回到最近的一次commit

撤销commit

在提交了几次commit后,觉得都不好,想要把这几次commit全都撤销掉

1
git reset <last good SHA> 
git reset --hard <last good SHA>

<last good SHA>指想要恢复到的commitgit resetcommit撤消后代码的变动还在,但没有被commit;加上--hard会将代码的变动一并撤销

恢复撤销的commit

在使用git reset --hard撤销了commit后,又想要恢复,可以使用git refloggit resetgit checkout

  • git reflog只能当HEAD发生改变后使用,运行git reflog后可以看到能够恢复的commit
  • 如果是想要恢复git工程的历史,使用git reset --hard <SHA>
  • 如果是想要重新创建删除的文件,并且不修改历史记录,使用git checkout <SHA> -- <filename>
  • 如果是想重做某个commit使用git cherry-pick <SHA>

撤销提交到master分支的修改

在提交了几个commit后发现是master分支,想要把这些commit提交到其他分支上去,可以使用git branch feature, git reset --hard origin/master, 和 git checkout feature
git branch feature创建一个新的分支叫featuregit reset --hard origin/master撤销对master分支的修改,git checkout feature将当前分支切换到feature

撤销已记录的文件

不小心将application.log添加到了仓库中(tracked file),撤销这个操作可以使用git rm --cached application.log

参考链接