【问题标题】: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
    

    您只需要添加squashs 而不是pick

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

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

    【讨论】:

    • 谢谢。我在一个分支中经常使用 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
          相关资源
          最近更新 更多