如果你想做一个real合并到master,没有。真正的合并至少需要一个工作树来进行工作。它还使用索引,该索引需要匹配操作外部的当前分支(请参阅git worktree add
方法如下)。
如果你想做一个快进操作(不是实际的合并),这是可能的。例如:
git push . develop:master
(注意缺少+
标志或--force
选项)将尝试快进您的master
与您的承诺相同develop
. Use HEAD
表示当前分支:
git push . HEAD:master
这些仅在可以快进的情况下才有效。如果没有,您将收到以下形式的错误:
! [rejected] [name] -> master (non-fast-forward)
它告诉你你需要一个工作树,其分支是master
在其中运行git merge
.
要做到这一点而不改变你的分支current工作树,使用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
) so git merge
现在有一个索引和工作树可以在其中完成其工作,或者将其混乱留给您来修复,以实际发生的情况为准(请参阅科斯蒂克斯的评论) https://stackoverflow.com/questions/54447800/git-merge-with-master-without-checkout-to-master/54448344?noredirect=1#comment95705408_54447966.