【发布时间】:2013-02-07 00:43:53
【问题描述】:
在我将功能分支合并回主分支后,我通常需要默认进行合并提交。但我想在此提交中使用来自我的功能分支的原始提交消息,而不是“合并分支 XXX”。
我该怎么做?
【问题讨论】:
标签: git version-control branching-and-merging
在我将功能分支合并回主分支后,我通常需要默认进行合并提交。但我想在此提交中使用来自我的功能分支的原始提交消息,而不是“合并分支 XXX”。
我该怎么做?
【问题讨论】:
标签: git version-control branching-and-merging
只需将-m 参数传递给merge 命令:
$ git merge other-branch -m "Commit Message"
【讨论】:
你基本上有两个选择。
简单的解决方案:不要合并,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。下一步将是一个提交文本编辑器,您可以在其中合并两个提交消息,现在由您来正确编辑它们以仅保留您的原始消息。
【讨论】:
git rebase -i 简单地编辑提交消息。不使用squash,只使用edit。我不是在 Git 中保存历史的重要保护者,对我来说,Git 是一个编辑器,可以编写你的项目历史,它的意义和易用性如何(例如 bisect)。因此,我广泛使用变基来保持我的历史整洁和有用;这可能不是你的意见,但我相信最终会是。
如果提交已经完成,您只需amend 提交即可。
如果在提交之前,请使用git merge,如下例所示:
$ git checkout mainBranch
$ git merge featureBranch --squash --no-commit
您可能需要解决冲突。
这种方法避免了自动提交,所有文件都留在索引上;因此,您可以使用任何您想要的提交信息来提交代码。
【讨论】:
当你在 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.
【讨论】:
我发现在合并提交之后。 我可以添加一个修正提交“git ci --amend”来更改提交信息, 这正是我所要求的。我会接受我自己的答案作为正确答案。
Simon Boudrias 和 Ranendra 给出了相关的答案,这些答案也以不同的方式有效。所以我给他们投票了。
【讨论】: