Git正在合并一个文件,实际上是在尝试重新合并一个文件

Git正在合并一个文件,实际上是在尝试重新合并一个文件,git,Git,我正在将一个分支合并到我的上游分支。你可以认为它只是两个分支之间的合并。现在,在我手动处理了所有合并冲突之后,我重新构建了一个源文件,发现其中一个源文件有编译错误 为了解决这个问题,我想重新合并这个有错误的文件,而不合并我已经合并的其他文件。那么,有没有一种方法可以解决这个问题,而不必忍受从头开始的痛苦呢 为了更好地解释它,假设上游存在三个文件A、B和C。我运行git pull从远程分支获取要与这些分支合并的内容。现在,我看到合并冲突,我手动逐个文件解决这些冲突。在进行编译时,我看到文件A和C编

我正在将一个分支合并到我的上游分支。你可以认为它只是两个分支之间的合并。现在,在我手动处理了所有合并冲突之后,我重新构建了一个源文件,发现其中一个源文件有编译错误

为了解决这个问题,我想重新合并这个有错误的文件,而不合并我已经合并的其他文件。那么,有没有一种方法可以解决这个问题,而不必忍受从头开始的痛苦呢


为了更好地解释它,假设上游存在三个文件A、B和C。我运行git pull从远程分支获取要与这些分支合并的内容。现在,我看到合并冲突,我手动逐个文件解决这些冲突。在进行编译时,我看到文件A和C编译得很好,而B有错误。因此,现在我想从一开始就重新合并B,而不浪费我在合并A和C时所付出的努力。

听起来合并导致解决方案最终没有处于良好状态。只需编辑需要更改的文件,即可编译所有内容并通过所有测试。如果您希望在合并之前将某些文件从某个状态中删除

git checkout origin/branch_you_want -- fileA fileB
现在只需修改合并提交:

git add -A
git commit --amend -C HEAD
这将重用相同的消息。您现在应该看到合并提交处于良好状态

更新:


警告!在执行合并和使用--amend时,您可能记录了一个您不打算记录的冲突解决方案!请参阅此处:

您可以运行git merge file,该文件执行三向合并。如果
HEAD
是您刚才进行的合并,那么以下类似操作应该可以工作:

git cat-file blob HEAD^:fileB > fileB # revert fileB to its pre-merge condition
git cat-file blob $(git merge-base HEAD^ HEAD^2):fileB > fileB.base # write the base version to fileB.base
git cat-file blob HEAD^2:fileB > fileB.other # write the other version of fileB
git merge-file fileB fileB.base fileB.other
这将重新运行合并并将合并结果(包括冲突)写入
fileB
(此时您可以删除
fileB.base
fileB.other

编辑:


如果您实际上还没有运行
git add fileB
(例如,如果
git status
显示合并冲突),并且如果您的磁盘上有
git merge one file
脚本(在我的情况下,它位于
/usr/libexec/git core/git merge one file
),那么,然后,您可以运行
git merge index/path/to/git merge one file fileB
,它将为您重新合并该文件。

由于您尚未提交该文件,您只需签出该文件的未合并版本:

git checkout --merge path/to/file

然后,您可以根据自己的喜好重新解决冲突。(
-m
--merge
的同义词)

我还没有提交它。此外,该文件有很多合并冲突,如果没有git插入头并快速访问,很难手动解决这些冲突。如果我可以让合并只针对这个文件运行,那么这将使我的生活更轻松。我看到讨论已经帮助了你。我只是想在我的答案中添加这个discraimer。当在事实发生后操纵合并时,请注意您录制的内容:)我尝试此操作时出错,错误为“文件没有全部三个版本'@GauravSinha:合并是否仍未提交,文件是否存在正常的修改/修改冲突?”?或者它是在两个分支中分别创建的,或者在其中一个分支中删除的,或者重命名的,或者类似的东西?是的,合并没有提交。这是一个正常的修改/修改冲突,但冲突的数量很高。Hm。我已经用了很多,只是为了以防万一,重新测试了一下。它工作得很好。提到的三个版本是共同的祖先,“我们的”和“他们的”分支。我不确定你到底出了什么问题。(仔细检查,以防万一-可能会克隆repo并在那里重新进行合并,并确保此文件确实存在修改/修改冲突,具有共同的祖先。)是的,我认为在我尝试了此目录中的许多操作后,出现了一些问题,取消了文件的暂存/暂存几次。我正在备份整个源代码,并将对未编译的文件重新进行合并,最后将已编译的文件复制到此目录。非常感谢。