在git中重新设置基准后不要签出分支

时间:2019-10-24 12:44:54

标签: git git-rebase

我在我的分支机构(不是母版)上,我需要在本地获取最新版本的master。接下来,我仍然停留在我的分支上:

git fetch
git rebase origin/master master

master被检出后,我需要返回我的分支。有什么方法可以避免在重新设置基准时检出本地master

3 个答案:

答案 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