Git与master合并而无需检出master

时间:2019-01-30 19:03:47

标签: git version-control

每次我需要mergedevelop一起master时:

git checkout master

git merge develop

有时我会忘记退出master。因此,我仍然在master上错误地更改了代码。可能会很混乱。我已经犯了几次错误的master

有没有一种方法可以将merge转换为master,而无需先切换到master

4 个答案:

答案 0 :(得分:3)

如果您想将 real 合并为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

要执行此操作而不更改您的 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),因此git merge现在具有一个索引和工作树,可以在其中进行工作或将其弄乱以供您使用修复,以实际发生的为准(请参见kostix's comment)

答案 1 :(得分:1)

否。

我想您可以编写一个小的Shell脚本来完成三个步骤:

isTest = f

您可能还想在上次结帐之前添加set cell-walls map [ p -> [ obstacle ] of p] map-area

答案 2 :(得分:1)

您可以给出一个尝试到被叫命令git graft通过提供git-extras

这不是正确的git命令,但是git-extras提供了一堆用于git存储库的工具。

对于您来说, git graft develop master 可能会为您提供所需的结果。

答案 3 :(得分:0)

git别名,它将当前分支合并到master并返回到当前分支:

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