gpt4 book ai didi

git merge squash 和反复出现的冲突

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

我有一个带有 masteralt 分支的 git 存储库。 alt 分支包含 master 代码的修改版本,我正在尝试 merge 从 masteralt 的更改,就像这样:

git merge --squash master

在冲突中 merge 结果:

Auto-merging myproject/foo/bar
CONFLICT (content): Merge conflict in myproject/foo/bar
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.

在我解决冲突并提交更改后,一切似乎都很好,但是当我再次运行 git merge --squash master 时(没有在任何分支上进行任何更改)我将得到相同的冲突错误。

这是为什么呢?我错过了什么?

最佳答案

通过压缩 merge ,您创建了一个具有 merge 效果但实际上不是 merge 的提交。

也就是说,工作树具有您期望的修改,但元数据没有:关键是,提交没有两个父项(一个在 master 上,另一个在 alt),因此后续 merge 无法找出最后的共同祖先。


squash 的有用用途

  1. 将一个完全完成的功能分支 merge 到master。我会将所有有用的信息积累到压缩的提交中,但特别不希望此功能的增量开发历史污染 master 提交时间线。
  2. 将几个独立的功能(或来自不同开发人员的贡献) merge 到同一个集成分支中,同样不保留它们的增量历史记录。我可以将它们全部 rebase ,然后使用rebase -i 压缩它们的提交,但这更容易

squash 的无用用法

您希望保持历史和祖先元数据完整的任何 merge ,例如您希望重复递归 merge 正常工作的任何时间,特别是 OP 正在尝试做

squash 并不是一个很好的默认设置,这就是为什么它不是默认设置的原因。

关于git merge squash 和反复出现的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797904/

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