Git:在合并过程中无法进行部分提交(SourceTree)

9
在将SourceTree更新到最新版本后,我遇到了这个问题。假设以下场景:
有文件A、B和C在版本控制下,只有一个分支。在我的工作副本中,我对文件A进行了一些更改,所以它变成了A',文件B也变成了B'。其他人在他的工作副本中对文件C进行了更改-> C'。
我对文件B进行了暂存并提交了更改。所以我有了一个新版本:A,B',C和工作副本A',B',C。
另一个人提交了他的更改,所以他创建了一个版本A,B,C',并将其推送到原始版本。
这就来了。当我执行拉取操作时,我得到了一些合并更改(C')。我想提交一个由A、B'、C'组成的版本。我现在不想对修改后的文件A做任何处理。然而,GIT、SourceTree等工具会失败,并显示以下信息:“fatal: cannot do a partial commit during a merge.”,除非我暂存或放弃对文件A的更改。
我很确定之前的某个SourceTree版本没有暴露出这种行为。
更新2017/05
在最新的SourceTree版本2.0.20.1中,似乎已经解决了这个问题。但是,请确保您想要更新到此版本,因为它包含了很多我不喜欢的“错误”(新功能)。
3个回答

4

致命错误:合并期间无法进行部分提交。

这表示您的合并仍在进行中,可能存在一些冲突需要解决。

请从下拉框中选择 冲突,如截图所示,您应该能够看到一个带有三角形图标的冲突文件列表。解决这些问题,然后进行提交即可解决您的问题。

enter image description here

本帖子应该会简要介绍如何配置和使用外部工具来解决合并冲突 - 如何交互式(可视化)解决Sourcetree/git中的冲突

如果您仍然无法解决问题,可以将更改暂存。从原始代码库中拉取并应用暂存即可解决同样的问题。

编辑

您还可以使用“自定义操作”自动执行所有此类操作。下面是一个样本脚本,用于执行stash >> pull >> apply stash操作:

git -c diff.mnemonicprefix=false -c core.quotepath=false stash save temp
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
git -c diff.mnemonicprefix=false -c core.quotepath=false pull origin <<local path goes here>>
git -c diff.mnemonicprefix=false -c core.quotepath=false submodule update --init --recursive
git -c diff.mnemonicprefix=false -c core.quotepath=false stash apply stash@{0}

1
感谢您的回复。在原始问题中,由于文件A未被更改和提交,因此不存在冲突。我知道我可以进行存储,但我不想每次执行合并时都这样做。特别是当在以前的版本中运行良好时。 - Jan Drozen
您还可以使用“自定义操作”来自动执行所有这些操作,请参考编辑。 - Arvin

2
以下是对这个 问题 的回答对我有帮助。
“您可以手动删除 .git/MERGE_HEAD,Git 就无法知道您只是在进行合并。它将让您像平常一样使用更改索引的方式修改以前的提交。”

0

对于像 IntelliJ 这样的程序,当有人推送临时文件时

# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml

只需右键单击并丢弃文件。

IDE稍后将重新创建这些文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接