Git在合并后提交错误-致命:不能在合并期间进行部分提交

我运行了一个git pull,在冲突中结束。我解决了冲突,现在一切都好了(我也使用了mergetool)。

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

fatal: cannot do a partial commit during a merge.

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

376025 次浏览

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

我发现在提交命令中添加“-i”可以为我解决这个问题。-i基本上告诉它在提交之前提交额外的文件。 即:< / p >
git commit -i myfile.php

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

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

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

  1. 只执行冲突文件(git add your_file.txt)
  2. 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':

< p > <代码> Git添加file_1.php file_2.php git提交代码< / > < / p >

干杯

git commit -i -m 'merge message'对我没用。它说:

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

FWIW,我通过这个相关的问题到达这里,因为我得到了这条消息:

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能给你更好的提示,告诉你在这种情况下该怎么做,那就太好了。

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

git commit "commit message"

应该是

git commit -m "commit message"

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

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

Tree Conflict screen .

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

看看所有这些Mods和添加的文件

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

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

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

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

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

这应该有用。

git commit -m "Fixing merge"

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

  1. 进入你的项目目录
    1. 显示隐藏文件(。将出现Git文件夹)
    2. 打开。git文件夹
    3. 删除MERGE_HEAD
    4. 再次提交
    5. 如果git告诉你git被锁定了,回到。git文件夹并删除index.lock
    6. 再次确认,这次一切都会正常工作。
    7. 李< / ol > < / >

阅读所有评论后。这就是我的决心:
我必须再次“添加”它,然后提交:

$ 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中的提交就很顺利了(我不需要使用命令行)。

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