如何在Git中回滚一个特定的提交?

时间:2013-08-07 20:49:24

标签: git

这是我的情况:

  1. 大约10次提交之前,我意外地做了一次糟糕的提交。我在UNIX / Windows之间切换,长话短说,我做了一个提交,其中每个文件都被更改,因为行结束。

  2. 之后我做了大约10次提交。

  3. 我现在意识到为了推送到远程存储库,我需要撤消步骤(1)中的提交(.gitattributes中有一个设置,我为此进行了修改以进行规范化)

  4. 如何回到那个时间点并且不提交每个文件?然后我需要在那之后重新提交其他9个更改?

1 个答案:

答案 0 :(得分:4)

如果您还没有推送10次提交,或者您的远程仓库是私有的而不与其他人共享,那么您可以尝试使用交互式rebase:

$ git rebase -i head~10 # Go back 10 commits in time.

在TODO提交列表中,选择edit作为列表顶部的提交:

edit d6627aa Commit message 1
pick 0efdaca Commit message 2
pick 9ec752f Commit message 3
pick c84bf57 Commit message 4
pick d4bcd50 Commit message 5
pick c0110c9 Commit message 6
pick 6606d13 Commit message 7
pick 22933be Commit message 8
pick cab2453 Commit message 9
pick 05add41 Commit message 10

然后修改你的最后一次提交,将你想要的行结尾改为:

# Modify your .gitattributes, then amend last commit
$ git commit --amend
$ git rebase --continue

要了解有关变基的详情,请参阅Rewriting Historyfree online Pro Git book部分以及official Linux Kernel Git documentation for rebase