gpt4 book ai didi

git - 将 merge 转换为 rebase,而无需再次执行 merge

转载 作者:IT王子 更新时间:2023-10-29 01:15:27 24 4
gpt4 key购买 nike

我犯了一个错误:我应该使用 git pull --rebase,但我发出了一个简单的 git pull, merge 了所有内容,现在在我的分支机构负责人。

我想摆脱那个 merge 提交,我想我只是发出一个 git rebase -i HEAD~3,将我最后的本地提交移到顶部并将 merge 提交压缩到它。 las, merge 提交不可用于压缩。如果我这样做,我会进入中间状态,我需要再次进行 merge ,这是一项很多的工作。

有没有办法不用再次执行 merge 就可以解决这个问题?似乎应该可以以某种方式使用 merge 提交?

最佳答案

tl;博士

即使您可以在 rebase 中包含 merge 提交,您也无法压缩 merge 提交。 Git 会通过以下方式让您知道:

Refusing to squash a merge: <SHA-1>

为了保留 merge 期间所做的更改,您可以做的是将 merge 提交转换为正常提交。那时你可以像任何其他提交一样压缩它。

假设 HEAD 指向 merge 提交:

git reset --soft HEAD~1  # Keeps changes in the index
git commit # Create a new commit, this time not a merge commit
git rebase -i HEAD~4 # Do an interactive rebase and squash the new commit

在 rebase 期间保留 merge 提交

通常,您可以在使用 git rebase -p 进行 rebase 时保留 merge 提交。
但是,它的目的是重放导致 merge 的提交。 merge 提交本身的任何更改(例如冲突解决)都不会保留。

这里来自documentation :

-p
--preserve-merges
Recreate merge commits instead of flattening the history by replaying commits a merge commit introduces. Merge conflict resolutions or manual amendments to merge commits are not preserved.
This uses the --interactive machinery internally, but combining it with the --interactive option explicitly is generally not a good idea unless you know what you are doing (see BUGS below)

bug文档所指的是由重新排序提交触发的。

关于git - 将 merge 转换为 rebase,而无需再次执行 merge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840872/

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