假设我按时间顺序进行了这些提交:
现在,我想摆脱b
但保留c,以便我有:
我该怎么做?
(b
和c
之间没有冲突
答案 0 :(得分:2)
如果您已将更改推送到遥控器,则可以使用:
$ git revert <hash of commit b>
创建一个新的提交d
,删除提交b
答案 1 :(得分:0)
假设您尚未推送到远程存储库,则可以执行交互式rebase。见这里:
答案 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.