我有两个分支,master和dev。我一直在使用dev,只有在批准生产使用后才能将代码检入主分支。当我这样做时,我必须做以下事情:
git checkout master
git merge dev
git checkout dev
这非常冗长,而且由于我经常这样做,我想尽量减少它。有没有一个git命令可以用来从我当前的分支dev合并到另一个分支master而不必先检查master分支?有点像:
git merge dev to master
会很棒。我查看了git文档并没有看到任何内容。
答案 0 :(得分:90)
1. 为本地存储库添加远程别名,例如:
git remote add self file:///path/to/your/repository
(或在Windows上git remote add self C:\path\to\your\repository
)
2。推送到自我遥控器,例如:
git push self dev:master
答案 1 :(得分:55)
@zerome当前得票最高的答案是一个很好的答案,但有点不必要的冗长。
在你的git repo的基础上你可以这样做:git push . dev:master
可以在树中的任何位置使用的更通用的解决方案是:
git push $(git rev-parse --show-toplevel) dev:master
答案 2 :(得分:43)
最好的办法就是使用别名,放在全局gitconfig(~/.gitconfig
)中:
[alias]
merge-to = "!f() { git checkout $1 && git merge $2 && git checkout -; }; f"
以便您可以从任何存储库调用
git merge-to master dev
答案 3 :(得分:38)
Jefromi别名的一点修改,不需要您输入当前分支。
所以你使用它:git merge-to dev
。
这将切换到dev
分支,将其与CURRENT合并,然后切换回来。
例如,假设您在master
分支上,它会将主服务器合并到开发人员中,您仍然会在主服务器上。
绝对是我的dotfiles:)
[alias]
merge-to = "!gitmergeto() { export tmp_branch=`git branch | grep '* ' | tr -d '* '` && git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset tmp_branch; }; gitmergeto"
答案 4 :(得分:6)
这是旧的,但是......
结合@ kevin-lyda和@ dmytrii-nagirniak的解决方案。此别名将当前分支合并到指定的分支中。它使用遥控器方法,并使用git命令获取上下文。
[alias]
merge-to = "!gitmergeto() { git push \"`git rev-parse --show-toplevel`\" `git rev-parse --abbrev-ref HEAD`:$1; } && gitmergeto"
用作:
git merge-to other-branch-name
答案 5 :(得分:2)
要将当前分支合并到另一个分支而不检出另一个分支:
这很容易。根据定义,快进合并仅意味着分支指针在提交树中向前移动。所以你需要做的只是模拟:
git branch -f master dev
警告:这假设
master
指向同时位于dev
分支或其他某个分支的提交。如果没有,你可能会失去工作!与git merge
不同,git fetch
会在无法快进的情况下创建合并提交(或投诉),此方法默默强制< / strong>指向另一个提交的分支指针。这也假设你是唯一一个处理回购的人,和/或你知道你在做什么。
提示:如果您执行了origin/master
并且master
中有新的提交,则可以移动git branch -f master origin/master
分支,而无需使用以下命令进行检查:
master
这并不总是可行的。要创建合并提交,您必须执行合并操作。要进行合并操作,您应该在另一个分支中提交不在当前分支中的提交。
如果dev
分支中的{strong>不的git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp
分支中有提交,您可以:
免责声明:这仅仅是一个概念验证,只是为了表明有时可以在不签出的情况下与其他分支合并。如果您想每天使用它,您可能希望使用shell重定向为它创建别名,或者为它创建一个shell脚本。然后,您还可以为问题中显示的较短过程创建一个shell脚本。
master
<强>解释强>
将dev
合并到临时分支并启动提交消息编辑器。如果您希望合并提交看起来像,那么您已将master
分支合并到Merge branch 'master' into temp
,请根据此进行编辑:
Merge branch 'dev'
到此:
-m "Merge branch 'dev'"
提示:您可以使用-e
代替master
更快。
dev
分支指针以指向合并提交。master
分支。这仍然触及你的工作树,但最低限度。它不会将树一直回滚到原始{{1}}的状态,只是为了再次引入开发更改。 有些人可能并不关心,但对于其他人来说,这可能很重要。
答案 6 :(得分:1)
很多时候你是从分支机构来的,你想将当前的分支合并到。在这种情况下,您可以这样做:
git co - && git merge @{-1}
例如:
git checkout somebranch // (while on master)
// add some commits
git co - && git merge @{-1} // will merge somebranch into master
答案 7 :(得分:0)
我的解决方案与其他答案类似,但有以下区别:
set -ex
,因此会打印每个命令,如果命令失败,函数会立即退出git merge
: git merge
,可确保制表符完成功能可用于某些shell设置(例如,oh-my-zsh的gitfast
)[alias]
merge-to = "!f() { : git merge ; \
set -ex ; \
local this=$(git rev-parse --abbrev-ref HEAD) ; \
local target=$1 ; \
shift ; \
git checkout $target ; \
git merge $this \"$@\" ; \
git checkout $this ; \
} ; f"