gpt4 book ai didi

git - Git 可以在 rebase 期间将 merge 转换为压缩吗?

转载 作者:行者123 更新时间:2023-12-05 08:09:48 25 4
gpt4 key购买 nike

 /-----------------------O
R---A------------M---D
\------B---C---/

据我所知,我可以使用 --preserve-merges 或不使用 --preserve-merges 来运行 git rebase

在上面显示的树中,将 A..D rebase 到 Owith 选项,我相信会导致:

R---O---A------------M---D
\------B---C---/

在没有选项的情况下做同样的事情会得到:

R---O---A---B---C---D

有没有办法实现

R---O---A---S---D

SBC 的压扁?

当我进行交互式 rebase 时,我认为提交是按 A B C D 排序的,因此 BC 在分支上的信息是未显示。我怎样才能告诉 Git 自动(标记为)压缩 merge 分支上的那些提交?

最佳答案

编辑:事实证明问题不是“我如何执行此特定操作”,而是显然是一个完全不同的问题。这是我对不同问题的改写。

Given one starting point commit identifier R, one tip-of-branch commit identifier T, and one onto-commit identifier O, how would one come up with a commit sequence that identifies some commits that can be squashed?

不幸的是,我无法从这个修改后的问题(我不确定首先是否正确修改)中判断是什么将一些提交限定为可压缩,而另一些则为不可压缩。如果我们允许在 R 之间出现任意数量的图表和 T ,我们可能有:

R -- A - B ------ C - D -- E - T
\ / /
F - G -- H -- I

例如,我不清楚 A-B应该被压扁,或者C-D-E , 或 D-E ;或 H-I , 等等。本身就是 merge 和/或充当分支点的提交似乎应该保留,但它们本身可以被压缩。

再编辑一些:我看到问题也已更新:对 squash 的提交是那些本身在分支上的提交——但在我上面的示例中,所有 F-G-H-I可能“在一个分支上”不止一次被 merge 回来,也许不是所有的分支都应该被压扁。所以我对选择“ Squash 候选人”仍然感到茫然。如果我们进一步限制问题,它们可能是“在 R..T 链上但不在 --first-parent 链的 R..T 段上的任何提交,也许。

[原始答案如下]


这是我半手动执行此操作的方法(请注意,如果 git rebase -i 可以执行此操作,那么它几乎就是这样做的:交互式 rebase 基本上是一系列带有一些特殊外壳的精选)。下面,O代表提交的 SHA-1 O ,或解析为它的分支或标记名称。

$ git checkout -b rewrite O     # get a new "rewrite" branch
$ git cherry-pick A # copy commit A
$ git cherry-pick --no-commit B # get B, no commit yet
$ git cherry-pick --no-commit C # add C: this is your S
$ git diff # check on it, do any fixing up needed
$ git commit # commit S, write new commit msg
# (might grab messages from B&C)
$ git cherry-pick D # add commit D

您可以省略 --no-commit在选择C如果它的提交消息是你想要的,并且你确定没有什么需要修复的。或者,使用 git cherry-pick --editC 开始的提交消息并对其进行编辑(或者,像往常一样,git commit --amend 或其他)。

这确实取决于现有的 merge M微不足道或大部分微不足道。如果它是一个 stash 了很多变化的“邪恶 merge ”,那么一两个更多git cherry-pickM , 与 -m 1和/或 -m 2 , 在采摘之前可能需要 D .

“重写”分支就是您想要的结果。如果您以比“重写”更好的名称开始它,您也不必重命名它。 :-)

关于git - Git 可以在 rebase 期间将 merge 转换为压缩吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589970/

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