代码之家  ›  专栏  ›  技术社区  ›  Kaloyan Roussev

Git重设基失败,因为:Commit xxxx是一个合并,但未提供-m选项

  •  5
  • Kaloyan Roussev  · 技术社区  · 8 年前

    我有一个专题分支:

    feature
    

    比如说10次提交

    不久前,我开始对它进行实验,但为了以防万一,我想保留当前的功能,所以我开始了一个新分支:

    feature-experiment
    

    然后又犯了10次罪

    今天我决定 merge feature-experiment 进入 feature 然后我删除了 特征实验 。我解决了一些合并冲突。

    然后,我的20次提交都使用了相同的名称并以 WIP (工作进行中),非常难看,所以我决定

    git rebase -p -i HEAD~22
    

    我变了 pick s 为了将它们全部压缩到这个特性最早的提交中,但我遇到了一些合并冲突(和以前一样)。我解决了他们,然后

    git add -A && git commit
    
    git rebase --continue
    

    但现在我得到以下错误:

    error: Commit asd123qsd is a merge but no -m     option was given.
    fatal: cherry-pick failed
    Could not pick asd123qsd 
    

    这是最后一次提交(合并提交)

    我再试了一次,但这次我没有改变这个特定的承诺 选择 s ,但得到了相同的错误。

    我怎么能执行这个可怕的重设基?

    我在想,作为一个可能的解决方案,我可以修改最后一次提交以向其添加-m,但我该如何做,以及如何使用这个-m命令?还有其他选择吗

    1 回复  |  直到 8 年前
        1
  •  3
  •   Ajedi32    8 年前

    问题可能在这里:

    git rebase -p -i HEAD~22

    这个 -p 选项说明见 the git documentation 作为的简短版本 --preserve-merges :

    -第页

    --保留合并

    重新创建合并提交,而不是通过重放来平展历史记录 提交引入了合并提交。合并冲突解决方案或 合并提交的手动修改不会保留。

    这在内部使用--交互机制,但将其结合起来 with--interactive选项通常不是一个好主意 除非您知道自己在做什么(请参阅下面的BUGS)。

    由于您试图在这里压缩提交,所以几乎可以肯定,保留合并提交并不是您想要的。此外,关于将 --保留合并 标记为 --interactive ( -i )这个标志可能和这里有关。

    老实说, 使用重设基进行类似的挤压可能比您在这里需要的复杂得多 。如果您只想将此分支的所有更改压缩为单个提交,可以这样做:

    git checkout feature
    git reset --soft <base of feature branch>
    

    此时,应该暂存特性分支的所有更改,并且特性分支应该位于基本提交位置。现在您可以简单地运行 git commit 创建一个包含特性分支所有更改的新提交,这基本上等同于一个挤压。