gpt4 book ai didi

当快进可用时,Git rebase 交互式不挤压

转载 作者:行者123 更新时间:2023-12-04 06:25:46 24 4
gpt4 key购买 nike

我有一个来自 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)。

我也尝试过(在开发分支上)
$git rebase -i HEAD~3
$git checkout master
$git rebase dev

但这真的很痛苦,我必须知道有多少次提交来压缩 HEAD~X 部分。

脚注:
这对我来说很重要的原因是这个压缩的变更集将在 gerrit 中进行审查。如果它们是分开的,则无法进行审查。

最佳答案

我不太确定你为什么要在你的问题中做一些事情,例如你真的不是说$git branch dev && git checkout dev在你做提交之前?使用您的版本,您只是在 master 上创建它们反正。 (顺便说一句,如果我是对的,您可以使用 git checkout -b dev 作为快捷方式。)

你得到一个 noop 的原因是 git rebase尝试重新应用当前分支中所有不在您作为 <upstream> 提供的分支中的提交。争论。所以,当你这样做时 git rebase -i dev同时在 master ,在 master 中没有提交不在 dev .本质上,你想反过来做。我会做以下事情:

git checkout dev
git rebase -i master
[... change to 'squash' all but the first of the actions ...]

然后你的 dev 分支将只有一个压缩提交,如果你愿意,你可以将它 merge 到 master 中。

或者,您可以使用 git merge --squash :
git checkout master
git merge --squash dev
git commit -m "The changes from dev squashed into one commit"

然后 master将有一个新的提交,表示 merge dev 的结果into master 被压缩为一个提交,并且新提交将只有一个父提交,而不是 merge 提交。

关于当快进可用时,Git rebase 交互式不挤压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com