关于git merge的冲突的一个问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于git merge的冲突的一个问题。相关的知识,希望对你有一定的参考价值。

现在有A分支,从A分支切换出B分支,然后分别在A分支和B分支上有自己的提交,
现在在A分支上git merge B,冲突的条件是什么呢?
是不是A分支上的a文件和B分支上的a文件不同就会冲突?
跪求高手解答。

是的,如果同一个文件的同一个地方两个分支都修改过了,而且修改的结果内容还不一样就会冲突了,需要手动修改后再提交。

如果解决了您的问题请采纳!
如果未解决请继续追问
参考技术A git merge的冲突判定机制如下:先寻找两个commit的公共祖先,比较同一个文件分别在ours和theirs下对于公共祖先的差异,然后合并这两组差异

更改文件名及其路径时,git merge 无法按预期工作(存在冲突)

【中文标题】更改文件名及其路径时,git merge 无法按预期工作(存在冲突)【英文标题】:git merge doesn't work as expected (present conflict) when changing file name and its path 【发布时间】:2022-01-21 15:00:21 【问题描述】:

假设我有 2 个分支:A 和 B(假设 B 是 A 的一个分支)

在分支A,我更改了一个文件root/blabla/ariel1.txt的内容

在B分支中,我把路径改成了ariel1.txt并重命名,所以现在叫ariel2.txt,路径是:root/yadayada/ariel2.txt

现在,我决定将分支 A 合并到分支 B。

git 如何知道将更改 ariel1.txt(在分支 A)合并到 ariel2.txt(在分支 B)?

我遇到过这种情况,git不知道如何正确处理。任何想法如何克服这种情况?

【问题讨论】:

Git 不跟踪重命名或移动。它具有尝试确定添加 + 删除是否真的是重命名或移动的启发式方法,但取决于在同一次提交中对文件所做的更改量,它可能会成功也可能不会成功。执行此类操作时,您最好的选择是移动和重命名文件在单独的提交中。不要更改此提交中文件的内容,只需移动和/或重命名它。这样,git 应该能够很容易地找出它被移动/重命名并采取相应的行动。 @LasseV.Karlsen 如果只有一个合并操作,那么在单独的提交中进行移动和重命名将无济于事。如果提前单独合并移动和重命名的提交,这确实会有所帮助。 添加到 Lasse 的解释中,如果您先重新设置分支,则合并是一个简单的快进合并,不会发生冲突。如果你想要单独的合并提交,你可以添加--no-ff 除非单个合并操作压缩提交,否则它应该会有所帮助。以我的经验,它确实有助于将移动和重命名分离到他们自己的提交中。例如,在 .NET 项目中,如果我想将一个类移动到不同的命名空间,我会在一次提交中根据命名空间结构将文件移动到正确的文件夹中,然后在另一个提交中修复文件中的命名空间声明犯罪。这使我能够跟踪文件的历史记录。唯一一次失败并让我感到困惑的是两个分支都这样做。 【参考方案1】:

Git 不存储重命名和副本。相反,它会检查文件是否具有相似的内容。如果分支 A 更改内容过多,Git 不会将其识别为重命名。您可以使用 --find-renames 控制它认为重命名的内容。

【讨论】:

但这应该引发冲突,不是吗? @arielma 仅当存在文本冲突时。如果一方只是重命名而不进行编辑,则合并另一方的编辑而不会触发冲突。 @arielma 如果 Git 不能识别 branchA 的 ariel1.txt 是 branchB 的 ariel2.txt 是同一个文件,它们不会冲突。这显然不好。此类问题通常通过不同的分支管理流程来解决。我需要详细了解您提出解决方案的流程。【参考方案2】:

git 如何知道将更改 ariel1.txt(在分支 A)合并到 ariel2.txt(在分支 B)?

它没有。当然,可以。您有一个独立移动或重命名文件的概念,作为与编辑文件正交的操作;但 Git 没有。

正如 Git 所见,文件在一个分支中被编辑;在另一个分支中它被删除。这些是相互矛盾的命运,因为被编辑意味着被删除;并且 Git 正确地转向你来解决冲突。

解决方案:解决它并继续前进。合并冲突并不坏或不常见;学会应付他们。

【讨论】:

对不起,我忘记提了,但 git 并没有将其反映为冲突... 好的,在这种情况下,请用实际行动和观察来更新您的问题。也提供一个minimal reproducible example,在一个空目录中以git init 开头。

以上是关于关于git merge的冲突的一个问题。的主要内容,如果未能解决你的问题,请参考以下文章

p4merge 错误 [GIT]

关于git你日常工作中会用到的一些东西

如何解决gerrit merge冲突问题

idea冲突文件没有merge窗口

Git:关于合并算法、冲突格式以及与合并工具的相互作用的困惑

关于git中自己的分支和主分支有冲突的解决方案(git和乌龟git)