【问题标题】:git: merge branch and use meaningful merge commit message?git:合并分支并使用有意义的合并提交消息?
【发布时间】:2013-02-07 00:43:53
【问题描述】:

在我将功能分支合并回主分支后,我通常需要默认进行合并提交。但我想在此提交中使用来自我的功能分支的原始提交消息,而不是“合并分支 XXX”。

我该怎么做?

【问题讨论】:

    标签: git version-control branching-and-merging


    【解决方案1】:

    只需将-m 参数传递给merge 命令:

    $ git merge other-branch -m "Commit Message"
    

    【讨论】:

    • 不会将新消息作为“提交消息”而不是复制功能分支提交消息吗?
    • 它会将合并作为单独的提交(如果可能的话,不要快进)将该消息作为提交消息。
    【解决方案2】:

    你基本上有两个选择。

    简单的解决方案:不要合并,Rebase
    在主分支之上重新设置分支,解决冲突,然后合并。由于您将拥有直接的历史记录,因此您将能够快进以进行合并,这不会创建任何 合并提交。

    git checkout feature
    git rebase main
    # Resolve conflict if there is
    git checkout main
    git merge feature
    

    第二个选项:变基 -i
    您可以在合并后编辑您的历史记录(在您推送到遥控器之前)。您可以使用 rebase 交互模式来管理它。

    git checkout main
    git merge feature
    #You merge and resolve conflict
    git rebase -i <sha of the commit before the merge>
    

    然后您将进入一个带有提交列表的交互式 shell,例如:

    pick 73c991e Create progress bar module
    pick b8a0b83 merge branch feature
    pick 2120f47 Add user form
    pick 70c55e4 Quiz prototype system
    

    您只需要添加squash 或s 而不是pick:

    pick 73c991e Create progress bar module
    pick b8a0b83 merge branch feature
    s 2120f47 Add user form
    pick 70c55e4 Quiz prototype system
    

    此命令将合并b8a0b83 和2120f47。下一步将是一个提交文本编辑器,您可以在其中合并两个提交消息,现在由您来正确编辑它们以仅保留您的原始消息。

    【讨论】:

    • 谢谢。我在一个分支中经常使用 squash 来组合提交。但我不知道合并的提交也可以被压缩。感谢您的提示。
    • 第二个想法,我很好奇为什么我必须选择 rebase 而不是合并。我对 merge 所做的非常满意,只是它没有给出正确的信息。我发现我可以“git ci --amend”来改变它。根据这篇文章:stackoverflow.com/questions/804115/git-rebase-vs-git-merge,rebase 更改了我分支功能分支的历史记录。我想保留这段历史。
    • 然后您也可以使用git rebase -i 简单地编辑提交消息。不使用squash,只使用edit。我不是在 Git 中保存历史的重要保护者,对我来说,Git 是一个编辑器,可以编写你的项目历史,它的意义和易用性如何(例如 bisect)。因此,我广泛使用变基来保持我的历史整洁和有用;这可能不是你的意见,但我相信最终会是。
    【解决方案3】:

    如果提交已经完成,您只需amend 提交即可。

    如果在提交之前,请使用git merge,如下例所示:

    $ git checkout mainBranch
    $ git merge featureBranch --squash --no-commit
    

    您可能需要解决冲突。

    这种方法避免了自动提交,所有文件都留在索引上;因此,您可以使用任何您想要的提交信息来提交代码。

    【讨论】:

      【解决方案4】:

      当你在 master 和本地分支中有不同的变更集时,git 会自动为 merge 创建一个额外的提交。要阻止此类额外提交的发生,您可以在将其合并到 master 之前 rebase 分支中的 master。

      $ git pull(in master which retrieves the new changes>
      $ git checkout <local_branch>
      $ git rebase master 
      $ git checkout master
      $ git merge local_branch.
      

      【讨论】:

        【解决方案5】:

        我发现在合并提交之后。 我可以添加一个修正提交“git ci --amend”来更改提交信息, 这正是我所要求的。我会接受我自己的答案作为正确答案。

        Simon Boudrias 和 Ranendra 给出了相关的答案,这些答案也以不同的方式有效。所以我给他们投票了。

        【讨论】:

          猜你喜欢
          • 2019-07-14
          • 2021-06-26
          • 2012-03-02
          • 2018-05-10
          • 2011-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多