有没有办法在实际合并两个分支之前查看它们之间的合并结果?
当尝试将分支 A 合并到分支 B 时,我通常从 B 签出一个临时分支,将其与分支 A 合并,然后我会创建一个差异补丁,或者只是签出到该临时分支并在合并之前检查一切是否正常A到B。
git 是否提供了可以完成此任务的命令或功能?
有没有办法在实际合并两个分支之前查看它们之间的合并结果?
当尝试将分支 A 合并到分支 B 时,我通常从 B 签出一个临时分支,将其与分支 A 合并,然后我会创建一个差异补丁,或者只是签出到该临时分支并在合并之前检查一切是否正常A到B。
git 是否提供了可以完成此任务的命令或功能?
正如 Marian Theisen 建议的那样,您可以这样做以在不提交的情况下进行合并
git merge --no-commit <branchname>
您可以退出该合并
git reset --hard
另外,请记住,在 Git 中改变主意并返回到以前的状态总是很容易的。您可以进行完整的合并,包括提交,检查完整的结果,如果您改变主意,您可以
git reset --hard HEAD^
丢弃合并并返回合并前的提交。
实际上,在合并解析期间的任何时候,您都可以
git reset --merge
中止合并并丢弃合并更改。
我将其称为“代码审查工作流程”并且一直这样做。
git merge --no-commit --no-ff branchname
如果没有--no-ff
标志,如果 Git 可以进行快进,那么它就会这样做。(正如预期的那样,在快进的情况下,没有要创建的合并提交。)
.gitconfig
为了方便起见,我设置了这个别名:
rev = merge --no-ff --no-commit
这样我就可以简单地做:
git rev branchname
这个想法是所有功能都在单独的分支中开发,每个功能都由作者以外的人审查和合并。正如其他答案指出的那样,您可以通过以下方式中止合并:
git reset --merge
并要求作者进行更多更改。
要查看仅包含合并提交的日志,我使用另一个别名:
revlog = log --first-parent
这样,日志就变成了大步骤的时间线:逐个特性而不是逐个提交。
为什么要麻烦?只需进行合并,对其进行测试,如果您不喜欢它,则git reset --hard HEAD^
返回到合并前的状态。无论您决定是否要保留合并,进行一些临时或中途合并只会增加您的工作量。