如何在重新定位之前插入提交?

时间:2012-08-16 05:09:42

标签: git git-branch git-rebase git-commit

我的历史现在看起来有点像这样:

                  origin/master
                        |
A --- B --- C --- D --- E
                   \
                     -- F
                        |
                     master

我想在E之后重新定义我的更改(提交F),但是在提交E中存在一些相当重要的问题我想首先纠正。基本上,这是我希望能够达到的目的:

                  origin/master
                        |
A --- B --- C --- D --- E --- G
                   \
                     -- F
                        |
                     master

然后想要在最后重新定义F,以获得最终的简单结果:

                              origin/master
                                    |
A --- B --- C --- D --- E --- G --- F

当我在主干上工作时,如何“搁置”提交F,然后在以后重新绑定它?我认为它会涉及git branch,但我不知道足够的git知道要发出的命令序列。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

创建一个指向F提交的分支:

git branch tmp

F分支机构中删除master提交:

git reset --hard HEAD~1

制作修补程序并提交它们:

git commit

在当前F分支之上添加master提交(这可能会导致冲突,因此请解决它们):

git cherry-pick tmp

删除临时分支:

git branch -d tmp

所以这里你真的不需要git rebase,它适用于更复杂的事情,或者至少不适用于一次提交。

答案 1 :(得分:0)

我假设你有一个单独的F分支,如果没有 - 我错过了你应该创建它。
我建议你不要使用提交G来处理master,但是也有一个单独的分支 请为它创建一个单独的分支。
1.然后,尝试将包含f的分支重新绑定到该分支(可能使用git rebase --onto,
虽然我认为还有另一种方法可以做到这一点) 另一种方法是在包含F的分支上执行git format-patch origin / master,然后在包含G的分支上应用此补丁。 你当然可能遇到冲突。
根据我的经验 - 选项1更好,由于某种原因git apply和git am比对另一个分支进行变基更“脆弱”(对不好的术语而言)。