我们假设我已经在bug修复分支上工作了大约一天,在Bug123分支上。现在我想把它合并到master。我相信标准做法是这样做:
git checkout master
git pull --tags
git merge Bug123
这很好,但在实际合并之前发生的事情是这样的:
所以我将代码库切换两次。事实上,我在步骤2中没有使用代码库。我真的不在乎前一天的主人,但我正在将代码库切换到它。
我发现效率更高的是:
(再次,我们假设我在Bug123分支上)
git fetch --tags
git checkout origin/master
git checkout -B master
git merge Bug123
通过这样做,我只将代码库切换一次,而且我永远不会回到原来的大师状态。
[更新] @ max630建议将中间的两行合并为一行:
git checkout -B master origin/master
[/更新]
我也发现这种技术在我有一个非常古老的本地代码库的情况下很有用。我去了,我只是这样做:
git checkout master
git pull --tags
我得到了一堆合并冲突。我不想做任何合并。我只想要最新的代码库。相反,我做同样的事情:
git fetch --tags
git checkout origin/master
git checkout -B master
这很有效。但我不确定这是正确的方法。我的意思是,我认为我的用例非常主流,所以不得不做一些奇怪的事情,比如“git checkout -B”。这对我来说似乎很骇人听闻。还有更好的方法吗?
为了保持这个问题的建设性,我不是在寻找主观意见。一个可接受的答案将是上述实现相同结果的替代方案,即与此问题顶部的原始工作流程相比,它减少了代码库切换次数。
请注意,此问题与“How to merge the current branch into another branch”不同。这个问题与减少命令数有关。我并不担心我必须发出的命令数量。我担心的是不必要地来回交换工作目录。这个问题的答案都没有解决我在这里提出的问题。
答案 0 :(得分:1)
避免两次切换的一种可能解决方案是:
git fetch origin master:master
git checkout master
git merge Bug123
第一次提取会更新您的本地分支master
。
答案 1 :(得分:1)
您可以使用rebase
执行此操作,例如:
# you are in branch Bug123
git fetch origin
git rebase origin/master
git checkout -B master
您正在以一种方式完成所有操作而无需切换到代码库两次,只需从远程master
获取最新更改,将它们添加到当前分支Bug123
并移动结果(来自远程{{1的最新更改)从master
)更改为Bug123
。