【问题标题】:Git, when renaming on both branches, not detected as renameGit,在两个分支上重命名时,未检测为重命名
【发布时间】:2018-03-30 12:46:48
【问题描述】:

关于 Git 在内容更改后未检测到重命名的许多问题。 我有一个不同的问题: 在共同祖先上有文件 f_rename.txt。 在一个分支(分歧)上,我将(仅,不更改内容)重命名为 f_rename_1.txt 在其他分支上仅重命名为 f_rename_2.txt

合并两个分支时出现冲突:

我无法理解这种行为,即使我假设 Git 没有检测到重命名操作并且 f_rename_1 被认为是一个新文件,那么为什么它标记为冲突?与什么冲突?

查看阶段文件,很明显未修改的文件(相同的 SHA1):

我希望像 Git conflict (rename/rename) 那样重命名/重命名

我不是在问如何解决冲突!而是为什么 Git 会这样。 我正在使用 Git '2.13.3.windows.1'

谢谢 波阿斯

【问题讨论】:

  • 如果它不会检测到重命名,则不会触发冲突。但是由于 git 知道发生了两个重命名,这显然是相互冲突的,它会产生冲突。为什么你认为这两个更名没有冲突?他们以两种不可能结合的方式处理同一个文件。这是一场冲突。
  • @Nils_M 我理解了我的错误,感谢 torek 的回答,我仍然无法理解在大量冲突的情况下如何分析和理解这是重命名/重命名

标签: git rename


【解决方案1】:

您在问题中包含的图像具有git status 输出。

您所期望的CONFLICT (rename/rename):git merge 命令打印。

您现在看到的在索引中留下的 trace 是索引有一个用于原始名称的 stage-1 条目(没有 stage-2 或 stage-3条目),一个新名称的第 2 阶段条目(没有第 1 阶段或第 3 阶段条目),以及另一个新名称的第 3 阶段条目(没有第 1 阶段或第 2 阶段条目) . git status 命令打印该类型跟踪的输出。

查看您的linked question 接受的答案,它显示相同的git status 输出。 both deleted 行只是在后面出现,因为输出按文件名排序,will-be-deletedw 开头,后面出现。

【讨论】:

  • 所以@torek,如果冲突不止少数,开发人员应该分析和检测这三重冲突并了解它是 rename/rename 吗?有没有办法简化这种分析?
  • 如果您保存来自git merge 命令的CONFLICT ... 错误消息输出,您将获得必要的信息。在我看来,Git 真的应该 将其写入索引,使其可检索以实现自动化和更好的git status 输出,因为有不同类型的我称之为“高级”合并冲突没有这些数据就很难区分。 (见stackoverflow.com/a/44360581/1256452
猜你喜欢
  • 2016-05-20
  • 2011-10-28
  • 2011-08-26
  • 2011-06-12
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多