每次我需要merge
和develop
一起master
时:
git checkout master
git merge develop
有时我会忘记退出master
。因此,我仍然在master
上错误地更改了代码。可能会很混乱。我已经犯了几次错误的master
。
有没有一种方法可以将merge
转换为master
,而无需先切换到master
?
答案 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-to
或git merge-to somebranch
。默认值为master