我的历史现在看起来有点像这样:
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知道要发出的命令序列。这样做的最佳方式是什么?
答案 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比对另一个分支进行变基更“脆弱”(对不好的术语而言)。