我做了一件蠢事,结果引起了冲突。我解决了冲突,现在一切都好了(我也使用了mergetool)。

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

fatal: cannot do a partial commit during a merge.

我以前遇到过同样的问题,在commit中使用-a工作得很好。我认为这不是完美的方式,因为我不想提交所有的更改。我想用单独的注释单独提交文件。我该怎么做呢?为什么git不允许用户在合并后单独提交文件?对于这个问题,我找不到满意的答案。


在合并过程中,Git出于各种原因想要跟踪父分支。你要做的不是git所看到的merge。您可能想要手动进行基数调整或选择。


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

git commit -i myfile.php

你可能在某些事情上有冲突,但你还没有准备好。git不会让你独立提交东西(因为这都是合并的一部分,我猜),所以你需要git添加那个文件,然后git commit -m "合并冲突解决"。git commit的-i标志为你添加。


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

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

只运行冲突文件(git add your_file.txt) Git commit -m "your_merge_message"


如果你只是想放弃所有的选择并提交你想要的文件集,

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

让你到达那里。

软重置所做的是将指向当前HEAD的指针移动到您给出的提交(ish),但不改变文件。硬重置将移动指针,并将所有文件恢复到提交(ish)中的状态。这意味着通过软重置,你可以清除合并状态,但保留对实际文件的更改,然后根据你的喜好分别提交或重置它们。


git commit -am 'Conflicts resolved'

这对我很管用。你也可以试试这个。


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


你的合并在动作中间停止了。 你应该添加你的文件,然后'git commit':

git 添加file_1.php file_2.php file_3.php git 提交

干杯


Git commit -i -m 'merge message'不适合我。它说:

fatal:没有包含——include/——only的路径是没有意义的。

FWIW,我通过这个相关的问题来到这里,因为我得到了这样的信息:

fatal:你还没有结束你的合并(MERGE_HEAD存在)。

我还尝试了mergetool,它说没有文件需要合并。很困惑!所以MERGE_HEAD不在需要合并的文件中-??

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

git ls-files -m |xargs git add

然后我终于(!)能够承诺并向上推。如果git能给你更好的提示,告诉你在这种情况下该怎么做,那就太好了。


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

git commit "commit message"

应该是

git commit -m "commit message"

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

背景:另一个团队将更改推送到远程Git存储库(通过Beanstalk)。在我这边,.xcodeproj文件放在不同的目录下,没有进行更改。后来,当我试图提交时,我在Xcode中收到了一个树冲突错误。

由于使用Xcode几乎不可能纠正错误,所以我用从Git服务器下载的版本替换了.xcodeproj文件。结果……Xcode项目似乎清理了,但是所有来自损坏的Pull的更新都显示为我所做的更改,并被提交。

然而,当尝试提交时,我收到了同样的“致命:不能在合并期间进行部分提交”错误,这里讨论。

Here's how I solved the problem... (Now, understand that I'm a rookie programmer, so I could lack some understanding... but my ignorance led me to find another way to do this.) First, I Cloned my master Branch into a secondary Branch and switched to that branch. Then I created a Working Copy and placed the directory to that working copy outside of the original project directory. (I don't know if this was necessary, but its what I did as I read other troubleshooting techniques.) Then I switched branches to the master, where I realized all my Staged files (changes to Commit) were gone. To make sure all the files were updated to the latest changes made by the other party, I created a new branch called ThirdBranch, which duplicated all files, Pushed it to the Git Server and let Beanstalk compare my server version of the master branch to the ThirdBrach branch I just Pushed (line by line), and all the changes by the other party were present on my Xcode. This meant that my master repository and the Git master repository were the same, which verifies that I solved the problem using Xcode, only.

不要问我是怎么做到的,除了我刚才描述的……当然也能填补我遗漏的空白。我是新手,也不是什么都懂。也许一个有经验的程序员可以将不相关的信息从相关信息中分离出来,并更清楚地重新创建这种技术,这也是我发布这篇文章的部分原因。

这是对重复问题的重复回答:失败的Xcode Git合并卡住了


正如错误消息所说,在合并之后不能进行部分提交。你应该提交所有的更改,而不是仅仅提交file.php。

这应该有用。

git commit -m "Fixing merge" 

如果它在Source Tree中,我们应该在冲突解决后显式地将文件标记为已解决。选择刚刚解决到没有冲突的文件。然后行动->解决冲突->标记解决。如果您有多个文件,请对所有文件执行相同的操作。现在提交。


转到项目目录 显示隐藏文件(。将出现Git文件夹) 打开。git文件夹 删除MERGE_HEAD 再次提交 如果git告诉你git被锁定了,回到。git文件夹并删除index.lock 再次确认,这次一切都会正常工作。


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

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

如果你使用的是源树或其他图形用户界面,确保所有文件都被检查(合并后)。


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

如果你提出,

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

你的承诺将会毫无问题地完成。


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


简单地git commit -m“comment”应该在解决冲突后工作。


如果存在合并,则不能执行部分提交,这意味着必须提交更改、添加或删除的所有内容。

在我的例子中,文件挂起删除,但它们没有包含在提交中。一旦我包含了它们,我在sourcetree中的提交就很顺利了(我不需要使用命令行)。

立即查看签入文件下面,是否有任何未包含在提交中的更改?