在 Git 存储库中强制将文件状态设置为“未合并”

问题描述 投票:0回答:1

当我将一个分支合并到另一个分支并发生冲突时,Git 告诉我有些文件未合并。例如:

% git status
On branch test-merge
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:
        modified:   .gitignore
        new file:   build.py

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   Makefile
        both modified:   duties.py
        both modified:   pyproject.toml

现在假设,在一个干净的存储库中(不是在合并期间),我在某些文件中手动添加冲突标记,例如:

<<<<<<< before updating
=======
This line was added
>>>>>>> after updating

我该如何让 Git 将此文件报告为“未合并”,即使事实并非如此?


上下文:Copier是一个项目模板工具。其主要功能之一是项目模板更新:您可以从 Copier 模板生成项目,发展项目,然后发展模板,并将模板更改应用到项目中,同时保留项目更改。请参阅更新的工作原理

运行更新后,Copier 有时会在某些文件中留下冲突标记。但由于这些标记不是来自合并,因此 VSCode 等工具不提供与未合并文件相同的 UX,即“源代码管理”选项卡将您带到 diff 视图,而不是普通视图,您可以在其中获得“接受传入”按钮、“接受当前”、“接受两者”等。此外,它不会将带有标记的文件分组到“合并更改”部分下,而是将所有内容都放在基本的“更改”部分下。另外,它不会阻止我暂存包含冲突标记的文件,因为 Git 不会将该文件报告为“未合并”。我在此 GitHub 评论中通过屏幕截图详细介绍了这一切。


我注意到,在合并过程中,

.git
文件夹中会出现一些文件,即AUTO_MERGE、MERGE_HEAD、MERGE_MODE和MERGE_MSG。有没有办法手动创建这些文件,即使这被认为是撒谎(例如在 MERGE_HEAD 中使用任意或虚假的 Git 引用)来强制 Git 将带有冲突标记的文件报告为未合并?


我知道我会花很大的力气只是为了稍微改进 Copier 和 VSCode 之间的用户体验,但我也很好奇是否有可能做到这一点,以及如何做到这一点:)也许我'我走错了方向,应该打开 VSCode 的功能请求来识别冲突的文件,无论 Git 对它们的说法如何。

如果需要,很乐意提供更多信息!

git visual-studio-code merge-conflict-resolution
1个回答
0
投票

我该如何让 Git 将此文件报告为“未合并”,即使事实并非如此?

您在未解决的合并期间将索引更新为其状态,其中包含基本内容和提示内容,但没有合并内容。您可以使用

git update-index --index-info
执行此操作,请参阅 Git 文档中的条目

一条路径有四个内容“阶段”。 “阶段 0”是正常阶段,在合并中还有三个阶段,“阶段 1”是其基本状态,“阶段 2”是“我们的”版本,“阶段 3”是“他们的”版本。未合并的路径具有指向文档所讨论的“高阶”版本的指针,并且没有已解析内容的条目。

© www.soinside.com 2019 - 2024. All rights reserved.