[英]Git merge with master without checkout to master
每次我需要merge
develop
与master
merge
,我都会这样做:
git checkout master
git merge develop
有时我忘记切换出master
。 因此,我在master
上错误地更改了代码。 它可能很乱。 我已经错误地承诺master
了几次。
有没有办法在不先切换到master
情况下merge
到master
?
如果你想真正合并到 master,不。 真正的合并至少可能需要一个工作树来进行工作。 它还使用索引,它需要匹配操作外部的当前分支(参见下面的git worktree add
方法)。
如果你想做一个快进操作(不是真正的合并),这是可能的。 例如:
git push . develop:master
(注意缺少+
符号或--force
选项)将尝试将您的master
快进到与您的develop
相同的提交。 使用HEAD
表示当前分支:
git push . HEAD:master
这些只有在可能快进的情况下才有效。 如果没有,您将收到以下形式的错误:
! [rejected] [name] -> master (non-fast-forward)
这告诉你你需要一个工作树,它的分支是master
来运行git merge
。
要在不更改当前工作树的分支的情况下执行此操作,请使用git worktree add
,如果您的 Git 至少为 2.5(最好至少为 2.15)。 例如,假设您位于存储库的顶级分支feature/X
:
git worktree add ../master # NB: assumes ../master is available as a directory name
cd ../master
git merge feature/X
... # do what it takes to complete the merge here
cd - # return to your main repository
rm -rf ../master # remove added worktree
git worktree prune # clean up list of added worktrees
添加的工作树有它自己的索引(和它自己的HEAD
)所以git merge
现在有一个索引和工作树来完成它的工作,或者让你修复它的混乱,以实际发生的为准(见kostix 的评论) .
不。
我想你可以写一个小的 shell 脚本来完成三个步骤:
#!/bin/sh
set -e
git checkout master
git merge develop
git checkout develop
您可能还想在最后一次结帐之前添加一个git push origin master
。
您可以尝试使用git-extras
提供的名为git graft
的命令。
它不是一个 git 命令,但git-extras
提供了一堆用于处理 git 存储库的工具。
在你的情况下git graft develop master
可能会给你你正在寻找的结果。
将当前分支合并到 master 并返回到当前分支的 git 别名:
git config alias.merge2master '!curbr=$(git rev-parse --abbrev-ref HEAD) && git checkout master && git merge $curbr && git checkout -'
将其称为git merge2master
。 要使其完全参数化:
git config alias.merge-to '!f() { !curbr=$(git rev-parse --abbrev-ref HEAD) && destbr="{$1:-master}" && git checkout $destbr && git merge $curbr && git checkout -; }; f'
称之为git merge-to
或git merge-to somebranch
。 默认是master
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.