Git 如何在分支的根提交之前添加新提交?
我有一个分支,有两个分支。我需要在它们之前添加第三个提交。通常我只需添加一个新的tip提交,执行Git 如何在分支的根提交之前添加新提交?,git,Git,我有一个分支,有两个分支。我需要在它们之前添加第三个提交。通常我只需添加一个新的tip提交,执行git-rebase-I,然后将其移动到顶部(使其成为分支上的第一个提交)。但是,我不能这样做,因为所讨论的特定更改会影响由前2次提交更改的代码,我需要在这些更改之前进行此更改(以避免不必要的冲突) 目前,我唯一能够做到这一点的方法是大致做到: $git-rebase-i源代码/主代码 将顶部提交标记为编辑(最早的提交) $git重置--软^ $git stash保存“上次提交” 进行一些代码更改 $
git-rebase-I
,然后将其移动到顶部(使其成为分支上的第一个提交)。但是,我不能这样做,因为所讨论的特定更改会影响由前2次提交更改的代码,我需要在这些更改之前进行此更改(以避免不必要的冲突)
目前,我唯一能够做到这一点的方法是大致做到:
$git-rebase-i源代码/主代码
$git重置--软^
$git stash保存“上次提交”
$git commit-am“New commit”
$git stash pop
$git commit-aC@{2}
(使用相同的消息再次提交上一次提交)$git rebase--继续
(直到完成)merge base
是一个合并提交,那么这将不起作用。我试过这个:
$ git rebase -i origin/master^
我还尝试:
$ git rebase -i origin/master^2
合并上的两个父级都作为我的基础提交。然而,我在todo文件中得到了大量额外的提交,我不知道为什么
实现这一点的简单直观的方法是什么?可以通过
cherry pick
第一步。记录3个提交的sha(假设它们是A1、B1和C1)
第二步。从相关分支执行以下操作(在下面的示例中,我假设它是从origin/master分支的)
我在git邮件列表上问了同样的问题,发现了一个非常可爱的解决方法。在交互式重基的TODO文件中,只需在顶部添加一个
exec false
:
exec false
pick 123abc Commit 1
pick 456xyz Commit 2
exec
将执行给定的shell命令false
导致非零返回代码,rebase将其解释为失败,并在下一次提交之前停止rebase,从而允许您直接进行提交。然后您可以git-rebase--正常继续。如果您签出一个新分支,提交该分支,然后切换回原始分支,然后git-rebase--切换到,则可以将步骤保存约1/2。
exec false
pick 123abc Commit 1
pick 456xyz Commit 2