我在我的分支机构(不是母版)上,我需要在本地获取最新版本的master
。接下来,我仍然停留在我的分支上:
git fetch
git rebase origin/master master
此master
被检出后,我需要返回我的分支。有什么方法可以避免在重新设置基准时检出本地master
?
答案 0 :(得分:2)
很遗憾,简短的答案是否。
来自doc:
如果指定了,git rebase将在执行其他任何操作之前执行自动git切换。否则,它将保留在当前分支上。
对于合并来说是相同的:您只能在这些操作的签出分支上进行操作,因为通常,它们可能会导致冲突状态,因此需要在现场进行解决。< / p>
一种解决方法是将后续结帐以别名方式链接(如果变基返回错误,则用&&
停止)。
# fm for "fresh master"
git config --global alias.fm '!git fetch && git rebase origin/master master && git checkout -'
答案 1 :(得分:1)
大多数情况下,可接受的答案有效,但是,如果起源/母版和母版是最新的,则变基不执行任何操作,并且使用git checkout -
将使您回到以前的任何分支。
解决方案是在“重新设定基准”之前检查两个参考之间的差异。
另外,我认为我们可以通过使用函数别名(即
)使其更通用refresh = "!f() { \
git fetch \
&& git diff origin/$1 $1 \
|| { \
git rebase origin/$1 $1 \
&& git checkout - \
;} \
;}; f"
更容易直接在配置文件中定义它,因为git config
命令将尝试转义引号并将其弄乱。
这样,您可以执行git refresh master
或任何其他分支。如有必要,您可以使用较短的名称重命名别名,或使用双别名来同时使用两者,即:
git config --global alias.rf refresh
别名的好主意,我一定会使用它。谢谢@vitalii
答案 2 :(得分:0)
如果您希望更改基于您的分支,则无需签出master
。您可以继续留在分支机构中-
git fetch
然后
git rebase origin/master
这将使来自本地分支的提交重新建立在origin/master
提交的基础之上。它不会更新您的本地master
。