1

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

  1. 一种
  2. b
  3. C

现在,我想摆脱b但保留 c,这样我就有了:

  1. 一种
  2. C

我该怎么做呢?

b(和之间没有冲突c

4

4 回答 4

2

如果您已经将更改推送到远程,您可以使用:

$ git revert <hash of commit b>

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

于 2012-04-03T20:41:51.737 回答
0

假设您尚未推送到远程存储库,您可以进行交互式变基。看这里:

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

于 2012-04-03T20:19:20.700 回答
0

如果您只需要来自 HEAD 的一个提交,则可以在不同的分支上使用 cherry-pick 来仅带来该提交:

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

硬重置将工作副本更改回提交时的状态,然后樱桃选择将提交中引入的更改c直接应用到工作副本之上。

于 2012-04-03T20:22:16.277 回答
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.
于 2012-04-03T20:47:31.990 回答