繁体   English   中英

Git 与 master 合并,无需结帐到 master

[英]Git merge with master without checkout to master

每次我需要merge developmaster merge ,我都会这样做:

git checkout master

git merge develop

有时我忘记切换出master 因此,我在master上错误地更改了代码。 它可能很乱。 我已经错误地承诺master了几次。

有没有办法在不先切换到master情况下mergemaster

如果你想真正合并到 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-togit merge-to somebranch 默认是master

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM