我有一个master的分支,有三个变化,我想把它改回master。例如:
$git checkout master
$git branch dev && git checkout dev
$<do 3 commits>
$git checkout master
$git rebase dev -i通常情况下,-i会给我3个提交,并允许我挤压。然而,在这种情况下,它只是"noop“,当rebase完成时,我看到三个提交移到了master。我猜想在这里,由于祖先没有分叉,快进是可能的,所以这就是发生的事情。但我想要压碎提交。
我尝试使用-- no -ff,但它的作用与我最初的用例完全相同(noop +no squashing)。
我还试着做(在dev分支上)
$git rebase -i HEAD~3
$git checkout master
$git rebase dev但这真的很痛苦,我必须知道有多少次提交来挤压HEAD~X部分。
脚注:这对我来说很重要的原因是它是这个被挤压的变更集,将在gerrit中进行审查。如果它们是分开的,就不可能进行审查。
发布于 2011-05-20 20:04:42
我不太确定你为什么要做你的问题中的一些事情,例如,在你提交之前,你不是真的想说$git branch dev && git checkout dev?使用您的版本,您只需在master上创建它们。(顺便说一下,如果我是对的,您可以将git checkout -b dev作为一种捷径。)
之所以只得到一个noop,是因为git rebase试图重新应用当前分支中的所有提交,这些提交不在您作为<upstream>参数提供的分支中。因此,当您在master上执行git rebase -i dev时,master中没有不在dev上的提交。从本质上讲,你想用另一种方式来做。我会做以下事情:
git checkout dev
git rebase -i master
[... change to 'squash' all but the first of the actions ...]那么你的dev分支将只有一个被压缩的提交,如果你愿意,你可以将它合并到master中。
或者,您可以使用git merge --squash
git checkout master
git merge --squash dev
git commit -m "The changes from dev squashed into one commit"然后,master将有一个新的提交,它表示将dev合并到主提交中的结果,并且这个新的提交将只有一个父提交,而不是合并提交。
https://stackoverflow.com/questions/6071548
复制相似问题