假设我按时间顺序提交了这些提交:
- 一种
- b
- C
现在,我想摆脱b
但保留 c,这样我就有了:
- 一种
- C
我该怎么做呢?
b
(和之间没有冲突c
)
如果您已经将更改推送到远程,您可以使用:
$ git revert <hash of commit b>
创建一个新的提交d
,删除提交的更改b
假设您尚未推送到远程存储库,您可以进行交互式变基。看这里:
如果您只需要来自 HEAD 的一个提交,则可以在不同的分支上使用 cherry-pick 来仅带来该提交:
$ git checkout -b working
$ git reset --hard <hash of the commit `a`>
$ git cherry-pick <hash of the commit `c`>
硬重置将工作副本更改回提交时的状态,然后樱桃选择将提交中引入的更改c
直接应用到工作副本之上。
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.