ChatGPT解决这个技术问题 Extra ChatGPT

合并后提交时出现 Git 错误 - 致命:在合并期间无法进行部分提交

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

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

fatal: cannot do a partial commit during a merge.

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

而且您知道,搜索 git perform "full commit" 几乎没有返回任何有用的信息。 Git 的手册页中没有一份相关文档。这是一个如此悲惨的工具。
@Torek - 谈论Git造成的另一个混乱......为什么从另一个分支签出一个冲突的文件如此困难,以避免冲突,将它添加到这个分支,然后提交它??? WTF 是部分提交?我找不到任何文档...用户被迫尝试以下猜测...
你是怎么做到的?我有冲突,我无能为力

M
MikaelHalen

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

git commit -i myfile.php

Stage additional files 是什么意思?
@jcalfee314 staging in git 是为提交准备文件。在这种特殊情况下,它在提交之前通过命令行暂存文件。 -i 标志主要用于结束合并时。您可以阅读有关提交标志 here 的更多信息。
@jcalfee314 我检查了 the documentation,它说 “到目前为止,在从暂存的内容中提交之前,也要暂存命令行上给出的路径的内容。这通常不是你想要的,除非你得出结论冲突合并”。我的猜测是,在这种情况下,暂存区存在某种无法通过 git add 解决的不一致,导致 git commit 失败。添加 -i 会告诉 git 同时添加和提交。我仍然不确定为什么,但这似乎是有道理的。
对于像我这样的菜鸟,如果您尝试包含不带引号的空格的消息,您也会收到同样的错误。例如。 [git commit -m 一二三] 正确:[git commit -m "一二三"]
@Skychan 的评论是我的票。
P
Pratip Ghosh
git commit -am 'Conflicts resolved'

这对我有用。你也可以试试这个。


太神奇了,我不知道这个!
这会将所有修改过的文件添加到提交中,即使是那些可能不需要的未暂存文件。用户可能希望去掉“a”标志
这正是用户要求不要做的事情,即避免提交所有文件。
E
Emile Bergeron

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

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

仅暂存有冲突的文件( git add your_file.txt ) git commit -m "your_merge_message"


P
Post Self

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

git commit "commit message"

应该

git commit -m "commit message"

啊啊!我又忘记了!
P
Paul Price

您可能在尚未提交提交的内容中遇到冲突。 git 不会让你独立提交事情(因为它是合并的一部分,我猜),所以你需要先git add那个文件然后git commit -m "Merge conflict resolution"git commit-i 标志会为您添加。


不在 1.9.0 中 — commit -i 有效,但 git add; git commit 无效
S
Sushil Adokar

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


这也是我的情况。不幸的是,在找到解决方案之前,我必须阅读以上所有内容......我像这样使用它 git commit "message" 。你需要 -m 在“消息”前面: git commit -m "message"
A
Asim Jalis

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

这应该有效。

git commit -m "Fixing merge" 

谢谢,有帮助
按原样为我工作
A
Ahmed Samir

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


伟大的!那对我有用。顺便说一句,如果在 MacOS 上,您可以从终端调用“打开 .git”,女巫将在 Finder 中显示“.git”内容
这也适用于我。这应该被接受为答案。
M
Moyshe Zuchmir

您的合并在操作中间停止。您应该添加文件,然后添加“git commit”:

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

干杯


Z
Zds

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

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

带你到那里。

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


你能再解释一下吗?这可能是我需要的,但我不知道它是如何工作的……这里的所有答案都只是“添加文件,然后提交!”,但这非常明显;我在这里的原因是我不想在提交之前添加这些文件。 -_-;
这有帮助。谢谢。 :)
K
Ketan Patel

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

现在,如果你发出,

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

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


z
zx485

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

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

J
Justin

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


谢谢,但不幸的是这对我不起作用。烦人的是,我必须先提交一个私有视图和合并,然后它才能让我提交合并。
E
Emile Bergeron

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

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

https://i.stack.imgur.com/eJEcl.png

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

https://i.stack.imgur.com/4N2si.png

但是,在尝试提交时,我收到了相同的“致命:在合并期间无法执行部分提交”错误,此处讨论。

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

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

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


请不要发布重复的答案。虽然潜在的问题可能是相同的,但您的答案是针对更具体的问题,并且只会模糊这个一般问题的答案。我认为在这种情况下,对链接到原始答案的问题发表评论更合适。
P
Peter Csala

解决冲突后,只需 git commit -m "comment" 即可工作。


T
Talljoe

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


我以前从未使用过 rebase 或cherry-pick,我现在只是浏览了手册,所以你会建议什么,合并冲突后的“git rebase master”会起作用?
这是一个并行的工作流程。请参阅 stackoverflow.com/questions/804115/git-rebase-vs-git-merge 基本上,如果您希望“合并”是单独的提交,您可以将源分支重新定位到目标分支的末尾。
只需 git 添加每个单独的文件,然后在没有 -a 的情况下提交。
您实际上并没有回答这个问题,而只是简单地提供了更多搜索。现在我们需要知道“什么是樱桃采摘”和“什么是变基”。
我想知道为什么这个答案被否决了。当有人告诉我一些我以前不知道的事情时,我总是有孩子的好奇心。正如我上面评论的那样,现在我知道了樱桃挑选和变基。那不是进步的/有帮助的吗?
C
Community

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 能更好地提示您在这些情况下该怎么做,那肯定会很好。


c
cgr

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


l
luky

如果您使用源代码树或其他 GUI,请确保检查所有文件(合并后)。