我运行了一个以冲突结束的 git pull
。我解决了冲突,现在一切都很好(我也使用了 mergetool)。
当我使用 git commit file.php -m "message"
提交已解析的文件时,出现错误:
fatal: cannot do a partial commit during a merge.
我之前遇到过同样的问题,在提交中使用 -a
效果很好。我认为这不是完美的方式,因为我不想提交所有更改。我想用单独的注释单独提交文件。我怎样才能做到这一点?为什么git不允许用户在合并后单独提交文件?我找不到这个问题的满意答案。
我发现在提交命令中添加“-i”可以为我解决这个问题。 -i 基本上告诉它在提交之前暂存其他文件。那是:
git commit -i myfile.php
git commit -am 'Conflicts resolved'
这对我有用。你也可以试试这个。
您可以在大多数情况下使用 git commit -i
,但如果它不起作用
你需要做git commit -m "your_merge_message"
。在合并冲突期间,您无法合并一个文件,因此您需要
仅暂存有冲突的文件( git add your_file.txt ) git commit -m "your_merge_message"
当我在解决 git 合并冲突时忘记了 git 提交中的 -m
时,我得到了这个。
git commit "commit message"
应该
git commit -m "commit message"
您可能在尚未提交提交的内容中遇到冲突。 git 不会让你独立提交事情(因为它是合并的一部分,我猜),所以你需要先git add
那个文件然后git commit -m "Merge conflict resolution"
。 git commit
的 -i
标志会为您添加。
commit -i
有效,但 git add; git commit
无效
看起来你错过了 -m 提交命令
正如错误消息所说,您无法在合并后进行部分提交。您应该提交所有更改,而不是只提交 file.php
。
这应该有效。
git commit -m "Fixing merge"
转到您的项目目录显示隐藏文件(.git 文件夹将出现)打开 .git 文件夹如果 git 告诉您 git 已锁定,则再次删除 MERGE_HEAD 提交返回 .git 文件夹并再次删除 index.lock 提交这次一切都会正常.
您的合并在操作中间停止。您应该添加文件,然后添加“git commit”:
git add file_1.php file_2.php file_3.php git commit
干杯
如果你只是想放弃整个挑选文件并在任何你想要的集合中提交文件,
git reset --soft <ID-OF-THE-LAST-COMMIT>
带你到那里。
软重置的作用是将指向当前 HEAD 的指针移动到您提供的提交(ish),但不会更改文件。硬重置将移动指针并将所有文件恢复到该提交(ish)中的状态。这意味着通过软重置,您可以清除合并状态,但保留对实际文件的更改,然后根据您的喜好单独提交或重置它们。
有时在合并期间,如果出现冲突并且存在需要手动解决的增量。在这种情况下,修复提到的文件的手动分辨率。
现在,如果你发出,
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
您的提交将毫无问题地完成。
看完所有评论后。这是我的决议:我不得不再次“添加”它而不是提交:
$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html
对我自己来说,当我在解析所有文件之前尝试提交合并时,这发生在 SourceTree 中。然后我将最后一个文件标记为已解决,但在尝试提交时它仍然给我这个错误。我关闭了 SourceTree 并重新打开它,然后它正常提交。
我用完全不同的方法解决了这个问题,只使用 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
解决冲突后,只需 git commit -m "comment"
即可工作。
在合并期间,出于各种原因,Git 想要跟踪父分支。你想要做的不是 git 看到的合并。您可能希望手动进行变基或挑选。
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 能更好地提示您在这些情况下该怎么做,那肯定会很好。
如果它在源代码树中,我们应该在冲突解决后将文件显式标记为已解决。选择刚刚解决为无冲突的文件。然后操作-> 解决冲突-> 标记已解决。如果您有多个文件,请对所有文件执行相同操作。现在提交。
如果您使用源代码树或其他 GUI,请确保检查所有文件(合并后)。
Stage additional files
是什么意思?git add
解决的不一致,导致git commit
失败。添加-i
会告诉 git 同时添加和提交。我仍然不确定为什么,但这似乎是有道理的。