【问题标题】:Git: cannot do a partial commit during a merge (SourceTree)Git:在合并期间无法进行部分提交(SourceTree)
【发布时间】:2016-09-21 12:19:23
【问题描述】:

将 SourceTree 更新到最新版本后,我正在解决这个问题。假设以下场景:

版本控制下有ABC文件,只有一个分支。在我的工作副本中,我对文件 A 进行了一些更改,使其变为 A' 以及文件 BB'。他的工作副本中的其他人对文件 C -> C' 进行了更改。

我暂存并提交我对文件B only的更改。所以我有一个新版本:AB'C和工作副本A' B'C

另一个人提交了他的更改,因此他进行了修订ABC'并将其推送到原点。

它来了。当我执行拉取时,我得到了一些合并更改(C')。我想提交一个由 AB'C' 组成的修订版。我现在不想对修改后的文件 A 做任何事情。但是,GIT,SourceTree 分别失败:

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

直到我暂存或放弃对文件A的更改。

我很确定以前版本的 SourceTree 没有暴露这种行为。

2017/05 更新

在最新的 SourceTree 版本 2.0.20.1 中出现此问题已得到解决。但是,请确保您要更新到此版本,因为它包含很多我非常不喜欢的“错误”(新功能)。

【问题讨论】:

    标签: git version-control git-merge atlassian-sourcetree


    【解决方案1】:

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

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

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

    这篇文章应该简要介绍如何配置和使用外部工具来解决合并冲突 - How to interactively (visually) resolve conflicts in SourceTree / git

    如果您仍然无法弥补,您可以隐藏您的更改。从原点拉出并应用 stash 来修复它。

    编辑

    您还可以使用“自定义操作”自动执行所有此类操作。下面复制了一个执行 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}
    

    【讨论】:

    • 感谢您的回复。在原始问题的情况下,没有冲突,因为文件 A 没有更改和提交。我知道我可以隐藏,但我不想每次执行合并时都这样做。尤其是当这在以前的版本中运行良好时。
    • 您也可以使用“自定义操作”自动执行所有此类操作,请参阅编辑
    【解决方案2】:

    对此question 的以下回答对我有用。

    "你可以手动删除 .git/MERGE_HEAD 而 Git 无法分辨 你只是在做一个合并。它会让你修改以前的 像平常一样提交索引中的更改。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2018-05-28
      • 2021-08-15
      相关资源
      最近更新 更多