合并后提交时发生Git错误 - 致命:在合并期间无法执行部分提交

时间:2011-04-29 04:36:59

标签: git commit

我跑了一个以冲突告终的git pull。我解决了冲突,现在一切都很好(我也使用了mergetool)。

当我使用git commit file.php -m "message"提交已解析的文件时,我收到错误:

fatal: cannot do a partial commit during a merge.

之前我遇到了同样的问题,并且在提交中使用-a工作得很好。我认为这不是完美的方式,因为我不想做出所有改变。我想分别使用单独的注释提交文件。我怎样才能做到这一点?为什么git不允许用户在合并后单独提交文件?我找不到这个问题的满意答案。

18 个答案:

答案 0 :(得分:401)

我发现在提交命令中添加“-i”可以解决这个问题。 -i基本上告诉它在提交之前暂存其他文件。 那就是:

git commit -i myfile.php

答案 1 :(得分:91)

git commit -am 'Conflicts resolved'

这对我有用。你也可以尝试一下。

答案 2 :(得分:27)

您可以在大多数情况下使用git commit -i,但如果它不起作用

您需要git commit -m "your_merge_message"。在合并冲突期间,您无法合并单个文件,因此您需要

  1. 仅播放冲突的文件(git add your_file.txt
  2. git commit -m "your_merge_message"

答案 3 :(得分:13)

您可能在某些事情上发生了冲突,而这些事情并未用于提交。 git不会让你独立提交东西(因为它是合并的全部内容,我猜),所以你需要git add该文件然后git commit -m "Merge conflict resolution"-i的{​​{1}}标记会为您添加。

答案 4 :(得分:10)

当我在解决git合并冲突时忘记了我的git提交中的-m时,我得到了这个。

git commit "commit message"

应该是

git commit -m "commit message"

答案 5 :(得分:7)

正如错误消息所示,您无法在合并后进行部分提交。您应该提交所有更改,而不是仅提交file.php

这应该有用。

git commit -m "Fixing merge" 

答案 6 :(得分:6)

您的合并在操作过程中停止。 您应该添加文件,然后提交#39;:

git add file_1.php file_2.php file_3.php git commit

干杯

答案 7 :(得分:5)

如果你只是想放弃整个挑选和提交你想要的任何集合的文件,

git reset --soft <ID-OF-THE-LAST-COMMIT>

带你到那儿。

软复位的作用是将指向当前HEAD的指针移动到您给出的提交(ish)但不改变文件。硬重置会移动指针并将所有文件还原为该提交中的状态(ish)。这意味着使用软复位,您可以清除合并状态,但保留对实际文件的更改,然后根据您的喜好单独提交或重置它们。

答案 8 :(得分:3)

对于我自己,当我在解析所有文件之前尝试提交合并时,这发生在SourceTree中。然后我标记了最后一个文件已解决,但在尝试提交时它仍然给了我这个错误。我关闭了SourceTree并重新打开它,然后它就没事了。

答案 9 :(得分:2)

git commit -i -m 'merge message'对我不起作用。它说:

fatal: No paths with --include/--only does not make sense.

FWIW,我是通过this related question来到这里的,因为我收到了这条消息:

fatal: You have not concluded your merge (MERGE_HEAD exists).

我也尝试过mergetool,它说No files need merging。很混乱!所以MERGE_HEAD不在需要合并的文件中 - ??

最后,我使用这个技巧只添加修改过的文件(不想在我的树中添加所有文件,因为我有一些我想保持不跟踪):

git ls-files -m | xargs git add

然后我终于(!)能够提交并推高。如果git能给你更好的提示,告诉你在这些情况下该怎么做,这肯定会很好。

答案 10 :(得分:2)

在合并期间,Git希望出于各种原因跟踪父分支。你想做的不是git看到它的合并。您可能希望手动进行rebase或者挑选。

答案 11 :(得分:2)

我使用完全不同的方法解决了这个问题,仅使用Xcode的源代码控制。

背景:另一个团队推动对远程Git存储库的更改(通过Beanstalk)。在我的结尾,.xcodeproj文件进入不同的目录,并且没有进行更改。后来,当我尝试提交时,我在Xcode中收到了Tree Conflict错误。

Tree Conflict Screenshot

使用Xcode几乎无法纠正,我用Git服务器上的下载版本替换了.xcodeproj文件。结果...... Xcode项目似乎已经清理完毕,但是来自腐败Pull的所有更新都显示为我所做的更改并且是为了提交而进行的。

Look at all these Mods and Added files

然而,在尝试提交时,我收到了相同的&#34;致命:在合并期间无法进行部分提交&#34;错误,在这里讨论。

在这里我是如何解决这个问题的......(现在,明白我是新手程序员,所以我可能缺乏一些理解......但是我的无知导致我找到另一种方法来做到这一点。)首先,我将我的主分支克隆到一个辅助分支并切换到该分支。然后我创建了一个工作副本,并将该目录放在原始项目目录之外的该工作副本中。 (我不知道这是否有必要,但是我在阅读其他故障排除技术时所做的事情。)然后我将分支切换到主服务器,在那里我意识到所有的分阶段文件(对Commit的更改)都没有了。为了确保所有文件都更新为另一方所做的最新更改,我创建了一个名为ThirdBranch的新分支,它复制了所有文件,将其推送到Git服务器并让Beanstalk将我的服务器版本的主分支与ThirdBrach分支我只是推(逐行),而另一方的所有更改都出现在我的Xcode上。这意味着我的主存储库和Git主存储库是相同的,这证明我只使用Xcode解决了这个问题。

除了我刚刚描述的内容之外,不要问我怎么样......当然也要填补我遗漏的空白。我是新手,我不了解一切。也许有经验的程序员可以将不相关的信息与相关信息分开,并更清楚地重新创建这种技术,这也是我发布此信息的部分原因。

这是重复问题的重复答案,如:Failed Xcode Git Merge is stuck

答案 12 :(得分:2)

  1. 转到您的项目目录
    1. 显示隐藏文件(将显示.git文件夹)
    2. 打开.git文件夹
    3. 删除MERGE_HEAD
    4. 再次提交
    5. 如果git告诉您git已被锁定,请返回.git文件夹并删除index.lock
    6. 再次提交,这次一切正常。

答案 13 :(得分:0)

如果它位于源树中,我们应该在解决冲突后将文件明确标记为已解析。刚刚解决为无冲突的选择文件。然后操作 - &gt;解决冲突 - &gt; Mark Resolved 。如果您有多个文件,请对所有文件执行相同操作。现在就提交。

答案 14 :(得分:0)

阅读所有评论后。这是我的决议:
我不得不再次“添加”它,而不是提交:

$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html

答案 15 :(得分:0)

如果您使用的是Source树或其他GUI,请确保选中所有文件(合并后)。

答案 16 :(得分:0)

有时在合并过程中,如果发生冲突并且存在需要手动解决的增量。在这种情况下,请为提到的文件修复手动分辨率。

现在,如果您发出问题,

git status Lib/MyFile.php

您将看到类似的输出

On branch warehouse
Your branch and 'origin/warehouse' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

    modified:   Lib/MyFile.php

由于您已经进行了提交,因此只需要发布

git commit

您的提交将顺利完成。

答案 17 :(得分:-1)

看起来像您错过了-m提交命令