如何删除错误的提交,同时保留以后的提交?

时间:2012-04-03 20:16:55

标签: git

假设我按时间顺序进行了这些提交:

  1. 一个
  2. B'/ LI>
  3. C
  4. 现在,我想摆脱b但保留c,以便我有:

    1. 一个
    2. C
    3. 我该怎么做?

      bc之间没有冲突

4 个答案:

答案 0 :(得分:2)

如果您已将更改推送到遥控器,则可以使用:

$ git revert <hash of commit b>

创建一个新的提交d,删除提交b

的更改

答案 1 :(得分:0)

假设您尚未推送到远程存储库,则可以执行交互式rebase。见这里:

http://book.git-scm.com/4_interactive_rebasing.html

答案 2 :(得分:0)

如果你只需要HEAD中的一个提交,你可以在另一个分支上使用cherry-pick来实现这个提交:

$ git checkout -b working
$ git reset --hard <hash of the commit `a`>
$ git cherry-pick <hash of the commit `c`>

硬重置会将工作副本更改回该提交时的状态,然后,cherry-pick会直接在工作副本的顶部应用commit c中引入的更改。

答案 3 :(得分:0)

git rebase的帮助谈到了这个确切的案例!看看:

A range of commits could also be removed with rebase. If we have the
   following situation:

           E---F---G---H---I---J  topicA

   then the command

       git rebase --onto topicA~5 topicA~3 topicA

   would result in the removal of commits F and G:

           E---H'---I'---J'  topicA

   This is useful if F and G were flawed in some way, or should not be
   part of topicA. Note that the argument to --onto and the <upstream>
   parameter can be any valid commit-ish.