要将当前分支合并到另一个分支中而不签出另一个分支:
快进合并
这真的很容易。根据定义,快进合并仅表示分支指针在提交树中向前移动。因此,您只需模拟一下:
git branch -f master dev
注意事项:假设这master
指向的提交也位于dev
分支或其他分支中。如果没有,您可能会失去工作!与git merge
无法在无法进行快进的情况下创建合并提交(或抱怨)的方法不同,此方法以静默方式强制分支指针指向另一个提交。
这还假设您是唯一正在处理该回购协议的人,并且/或者您知道自己在做什么。
提示:如果您执行了a git fetch
并且您有新的提交origin/master
,则可以master
使用以下方法移动分支而无需签出:
git branch -f master origin/master
通过合并提交进行合并
这并不总是可能的。要创建合并提交,您必须执行合并操作。要执行合并操作,您应该在另一个分支中拥有不在当前分支中的提交。
如果你有在提交master
分支,它是不是在dev
分行,您可以:
免责声明:这仅仅是一个概念证明,只是为了表明有时可以在不签出的情况下合并到另一个分支。如果您想每天使用它,则可能要使用外壳重定向为其创建别名或为其创建外壳脚本。同样,您也可以为问题中所示的较短过程制作一个shell脚本。
git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp
说明:
- 签出一个临时分支,该分支指向与当前分支相同的提交。
合并master
到临时分支中并启动提交消息编辑器。如果您希望合并提交看起来像已经将dev
分支合并到中master
,则可以从中进行编辑:
Merge branch 'master' into temp
对此:
Merge branch 'dev'
提示:您可以使用-m "Merge branch 'dev'"
而不是-e
更快。
- 更新
master
分支指针以指向合并提交。
- 签出
dev
分支。
- 强制删除临时分支。
这仍然会触及您的工作树,但至少会如此。它并不会完全还原到原始状态,master
只是为了再次引入开发更改。有些人可能不在乎,但对另一些人来说可能很重要。