git rebase说什么都不做
我有以下分支机构、master和2个其他分支机构(b1和b2): 我想重新设置b分支的基础,使其父级为主级:git rebase说什么都不做,git,rebase,Git,Rebase,我有以下分支机构、master和2个其他分支机构(b1和b2): 我想重新设置b分支的基础,使其父级为主级: / - a1 m1 \ - b1 如果我使用git-rebase-master或git-rebase-origin/master,我会得到当前分支b是最新的。这似乎是错误的,但我认为这与b在某些方面已经植根于master这一事实有关。我必须使用-,这似乎也是错误的 老实说,在这种情况下,您可以选择b1提交到来自master的新分支上: # from b git reset --ha
/ - a1
m1
\ - b1
如果我使用
git-rebase-master
或git-rebase-origin/master
,我会得到当前分支b是最新的
。这似乎是错误的,但我认为这与b在某些方面已经植根于master这一事实有关。我必须使用-,这似乎也是错误的 老实说,在这种情况下,您可以选择b1
提交到来自master
的新分支上:
# from b
git reset --hard master
git cherry-pick b1
如果要使用重基选项,请使用--on
:
# from b
git rebase --onto m1 a1
上面提到要重新设置
b
分支的基础,这样父级为a1
commit(仅为b1
commit)的commit现在应该位于一个新的基础上,特别是commitm1
,所以在我发布这篇文章后不久,我就理解了问题:命令
git rebase master
从当前分支获取所有提交,一直追溯到从第二个参数iemaster
分支的第一次提交,并将它们重新设置到master
头上
为了澄清为什么这不起作用,让我们在我的原始图表中添加更多的提交:
/- b1 - b2
/- a1 - a2
m1 - m2 - m3
其中以“m”开头的提交位于master
分支上(因此master
头部位于m3
),以“a”开头的提交位于a
分支上(因此a
头部为提交a2
),同样,对于“b”(因此b
头部为b2
)。我的目标是以这样的方式结束:
/- a1 - a2
m1 - m2 - m3
\- b1 - b2
我试过的命令基本上与
git pull
git checkout b
git rebase master
问题是,“直到从master
分支的第一次提交”包括分支a
上的提交,所以git将尝试将a1-a2-b1-b2
重设到master
的头部,即m3
。这个提交序列已经植根于m3
,所以git正确地说没有什么可做的
我不得不改为
git-rebase-to-master a
,意思是“将当前分支(即b
)重新基址到master
,但只有在分支a
”的头提交之后,即“rebaseb1-b2
到m3
” 它可以在一次拍摄中完成,如下所示:
git rebase --onto master a b
你告诉我,在掌握构成分支b的所有修订的基础上重新设置基础,但放弃作为分支b历史一部分的修订。。。换句话说,将修订版b1放在母版的顶部(创建b1'),将b设置为指向b1'。这不是一个很好的解释。它面临着与问题相同的问题,即对分支是什么的误解。这个解决方案和你在一个更好的答案中已经被告知的没有什么不同。@matt你是对的,我完全重写了它,我希望这更好。
git rebase --onto master a b