gpt4 book ai didi

git automerge 结果在单个文件中不令人满意,我宁愿用三向差异手动解决那个问题

转载 作者:行者123 更新时间:2023-12-05 08:35:43 24 4
gpt4 key购买 nike

我一直在使用 git 进行 merge 。我对接下来发生的事情感到恼火,我想知道工作流程是否有更好的方法(我缺少的命令,另一种方法,无论如何)。

当我像 git merge --no-ff --no-commit that/other-branch 那样对 my/branch 进行 git merge 时,我通常会解决冲突。现在这已经完成,我将检查所有更改以防自动 merge 出错(如果您想知道,因此是 --no-commit)。

上次,我发现了一个自动 merge ,那 - 你会笑的 - 我宁愿有冲突。确实,自动 merge 丢弃了一些我不希望它丢弃的东西。

这里有一个简短的括号:我不是在讨论 git 自动 merge 它在最近的公共(public)基础上的表现是对还是错。我只是说,好吧:我宁愿让 git 在那个大 merge 的其他文件中重播那个单个文件的游戏,并将其标记为冲突以供我手动编辑。

因此,当前的设置是:

  1. git merge --no-ff --no-commit
  2. 有冲突需要解决,编辑它们,添加它们。完毕。让我们继续吧。
  3. 我检查差异(包括自动 merge ):git diff HEAD
  4. 我发现文件 foobar 以一种让我不满意的方式自动 merge 。

那么命令 #5 是什么:

  1. 在步骤 #1 的大 merge 中间重放单个文件 foobar 的 merge ,以强制将其标记为与三向差异友好文件冲突,即 <<<<<<< ======= >>>>>>> 而不是自动 merge 的结果。

谢谢。

最佳答案

LeGEC's answer是一个很好的,除了添加警告之外,没有什么可说的了。这应该是评论,但我想包含一些格式,这在评论中是不可能的。此外,评论长度限制令人不安。 😀

每当 Git 的 automerge 以某种方式 merge 某些东西,而您覆盖它并提供一些不同的结果时,就会产生一些人称之为邪恶 merge 的东西。 (参见 Evil merges in git?)这不是真的错误,但是有一个危险:像 git rebase --rebase-merges 这样的命令实际上并没有保留现有的 merge 提交,但是而是重新运行 git merge 代码。如果 Git 已经生成(并且确实生成了)一些文件作为自动 merge 而没有冲突,那么这个重新运行的 merge 将再次生成该文件。您必须在此处停止进程并重做您的“邪恶 merge ”效果。

因此,您可能想要继续提交“坏”结果,然后添加额外的提交来修复它。这种“治愈”(通过添加修正提交来避免邪恶的 merge )在某些方面比一开始的“疾病”更糟糕,但它允许 --rebase-merges 代码工作。

或者,您可以将一些东西插入到两个分支中作为新的提示提交,以便 git merge 失败您要手动 merge 的区域。这也有一些缺点,但意味着重新 merge 将重新-使用重新记录的重新解决方案(如果你已经打开了git rerere on) 或再次停止以进行手动 merge 。

作为最后的选择,您可以添加新的提示提交,以确保自动 merge 结果是您想要的。这些是否是“损坏的提交”,与中间选择产生故意损坏的提交(以导致 merge 失败 - 但请注意,无论您使用何种语言,都将“损坏”作为评论'正在使用,可能就足够了)或不使用可能取决于情况。

关于git automerge 结果在单个文件中不令人满意,我宁愿用三向差异手动解决那个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73459015/

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