git - 无法正确解决文件冲突后是否可以恢复?

标签 git conflict resolve

假设我进行了 rebase 操作,并且 100 个文件存在冲突。我必须一一解决。假设我已经解析了 (N-1) 个文件,并且正在处理文件 N。处理了一段时间后,我发现我弄乱了该文件。所以我想再次从头解决。但我不想中止 rebase 并再次进行 rebase ,因为我不想再次解析 (N-1) 个文件。

是否可以仅恢复文件 N 的 merge 冲突,以便我可以从头开始再次解决它?

最佳答案

假设您正在处理的文件名为 test.txt ,并且由于 merge 尝试而导致文件留下了冲突标记,并且您以某种方式搞砸了这些冲突的手动解决,您可以使用几个命令重新创建带有冲突标记的文件。

作为背景,了解一下这一点很有帮助:当 merge 需要手动解决文件冲突时,它会在 git 中留下该文件的三个不同副本(称为“阶段”)。指数。阶段 1 是要 merge 的文件的两个版本的共同祖先,阶段 2 和阶段 3 是您尝试 merge 的两个分支的两个版本。 git 中的一些(但不是全部)实用程序理解语法 :<stage>:<filename>来引用这些条目。

因此,您首先需要做的是在某处重新创建这三个文件的临时副本 - 我将使用 /tmp在这里,但这不是强制性的:

git cat-file -p :1:test.txt > /tmp/test.txt.1
git cat-file -p :2:test.txt > /tmp/test.txt.2
git cat-file -p :3:test.txt > /tmp/test.txt.3

然后,使用git管道命令git merge-file使用适当的冲突标记重新创建文件。请注意,参数的顺序在这里很重要,并且保存您已对此文件所做的工作可能是一个好主意,以防您想在重新 merge 时引用它。

mv test.txt test.txt.broken
git merge-file -p /tmp/test.txt.2 /tmp/test.txt.1 /tmp/test.txt.3 > test.txt

这将重新创建 test.txt带有冲突标记(尽管没有通常包含的分支名称注释 - 如果您确实想要这些,则需要添加一些 -L <branchname> 参数 - 您可以输入 git help merge-file 以获得更多信息)。 p>

此时,您可以清理临时文件,并重新开始解决该文件中的冲突。记得git add完成后,然后继续处理其余文件。

关于git - 无法正确解决文件冲突后是否可以恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209168/

相关文章:

Swift:如何在完成体内调用我的函数?

networking - K3S Rancher - 基于 Debian 的 docker 镜像无法正确解析 dns

c# - TryParse 无法正确解析

Git * text=auto 在 gitattributes 文件和行尾

git - 使用 git 时,如何将确切的工作目录推送到远程?

javascript - 为什么我的 dropzone javascript 表单不起作用?

javascript - htaccess 与 ajax 脚本冲突

php - Git如何查看函数的更改历史/删除?

GitKraken 没有显示我是贡献者的 repo 协议(protocol)

c++ - 如何避免与其他使用共享内存和信号量的程序发生冲突