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

pMa*_*Man 272 git commit

我跑了git pull一场冲突结束了.我解决了冲突,现在一切都很好(我也使用了mergetool).

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

fatal: cannot do a partial commit during a merge.
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*len 425

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

git commit -i myfile.php
Run Code Online (Sandbox Code Playgroud)

  • git commit -i*-m"message"对我来说很好 (36认同)
  • 什么"舞台附加文件"是什么意思? (16认同)
  • @jcalfee314在git中的分段是为提交准备文件.在这种特殊情况下,它在提交之前通过命令行分段文件.-i标志主要用于结束合并时.您可以阅读有关提交标志的更多信息[此处](https://www.kernel.org/pub/software/scm/git/docs/git-commit.html). (8认同)
  • @ jcalfee314我检查了[文档](http://git-scm.com/docs/git-commit)并且它说**"在提交暂存内容之前到目前为止,分段上给出的路径的内容命令行.这通常不是你想要的,除非你得出一个冲突的合并"**.我的猜测是,在这种情况下,暂存区域存在某种不一致的问题,而git add`无法解决这种问题,这使得`git commit`失败.添加`-i`会告诉git同时添加和提交.我仍然不确定为什么,但似乎有道理. (4认同)
  • 对于像我这样的新手,如果你尝试包含没有引号的空格的消息,你也会得到同样的错误.例如.[git commit -m one two three]正确:[git commit -m"one two three"] (3认同)
  • @Skychan 的评论是我的门票。 (3认同)

小智 98

git commit -am 'Conflicts resolved'
Run Code Online (Sandbox Code Playgroud)

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

  • 这会将所有已修改的文件添加到提交中,**甚至是未分级的文件**,这可能是不可取的.用户可能希望不使用'a'标志 (7认同)
  • 这正是用户要求不要做的,这是为了避免提交所有文件. (3认同)

aWe*_*per 30

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

你需要这样做git commit -m "your_merge_message".在合并冲突期间,您无法合并单个文件

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


Pau*_*ice 14

你可能在你没有提交的东西上发生了冲突.git不会让你独立提交东西(因为它是合并的全部内容,我猜),所以你需要git add那个文件然后git commit -m "Merge conflict resolution".该-i标志为git commit是否添加你.

  • 不是在1.9.0中 - `commit -i`有效,但不是`git add; git commit` (5认同)

小智 12

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

git commit "commit message"
Run Code Online (Sandbox Code Playgroud)

应该

git commit -m "commit message"
Run Code Online (Sandbox Code Playgroud)

  • 啊啊!我又忘了! (2认同)

小智 10

简单地git commit -m "comment"应该在解决冲突后工作..


小智 9

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

这应该工作.

git commit -m "Fixing merge" 
Run Code Online (Sandbox Code Playgroud)


Moy*_*mir 6

您的合并在操作过程中停止.你应该添加你的文件,然后'git commit':

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

干杯


Zds*_*Zds 5

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

git reset --soft <ID-OF-THE-LAST-COMMIT>
Run Code Online (Sandbox Code Playgroud)

把你带到那儿.

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


小智 5

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


小智 5

看完所有评论后。这是我的决定:
我必须再次“添加”它而不是提交:

$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html
Run Code Online (Sandbox Code Playgroud)


小智 5

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

现在如果你发出,

git status Lib/MyFile.php
Run Code Online (Sandbox Code Playgroud)

你会看到类似的输出

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
Run Code Online (Sandbox Code Playgroud)

因为您已经上演了提交,所以您只需要发出

git commit
Run Code Online (Sandbox Code Playgroud)

并且您的提交将毫无问题地完成。


Sus*_*kar 5

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