Git重定基址交互在快进可用时不挤压
我有一个来自master的分支,有三个更改,希望将其重新设置为master。例如:Git重定基址交互在快进可用时不挤压,git,Git,我有一个来自master的分支,有三个更改,希望将其重新设置为master。例如: $git checkout master $git branch dev && git checkout dev $<do 3 commits> $git checkout master $git rebase dev -i 但这真的很痛苦,我必须知道有多少人承诺为头部~X部位挤压 脚注: 这对我来说很重要的原因是,gerrit将对这个压缩的变更集进行审查。如果它们是分开的,那就不可
$git checkout master
$git branch dev && git checkout dev
$<do 3 commits>
$git checkout master
$git rebase dev -i
但这真的很痛苦,我必须知道有多少人承诺为头部~X部位挤压
脚注:
这对我来说很重要的原因是,gerrit将对这个压缩的变更集进行审查。如果它们是分开的,那就不可能进行审查。我不太清楚你为什么要做你问题中的一些事情,例如,在你提交之前,你不是真的要
$git branch dev&&git checkout dev
?对于您的版本,您只是在master
上创建它们。(顺便说一句,如果我是对的,您可以使用git checkout-b dev
作为快捷方式。)
您刚刚获得noop的原因是,git rebase
尝试重新应用当前分支中不在作为
参数提供的分支中的所有提交。因此,当您在master
上执行git rebase-i dev
时,master
中没有不在dev
上的提交。基本上,你想反过来做。我会这样做:
git checkout dev
git rebase -i master
[... change to 'squash' all but the first of the actions ...]
然后,您的开发分支将只有一个压缩提交,如果您愿意,您可以将其合并到master中
或者,您可以使用git merge--squash:
git checkout master
git merge --squash dev
git commit -m "The changes from dev squashed into one commit"
然后,
master
将有一个新的提交,它表示将dev
合并到master中并压缩为一个提交的结果,并且该新提交将只有一个父级,而不是合并提交。这里的关键实际上是使用master
作为重基的基础,而不是一些特别命名的提交。即使师父已经走得太远了,你们也知道你们可能想要压扁的一切都是从那个时候开始的。(还有,merge--squash
是否仍然自动提交?@Jefromi:在我最近使用的所有git版本中,git merge--squash
只是阶段性地进行更改。以前不是这样吗?在提交中添加的文档引入了git merge--squash
(7d0c68871a8),文档中还说“不要实际提交”。那就没关系了!它可能会创建一个模板消息?这可能就是我所想的。是的,你是对的,结账时有个打字错误。现在更正。为结帐干杯-b提示-git的新功能!
git checkout master
git merge --squash dev
git commit -m "The changes from dev squashed into one commit"