在 git 中 rebase 后不要签出分支

问题描述 投票:0回答:3

我在我的分支(不是主分支)上,我需要在本地获取最新版本的

master
。接下来我仍然留在我的分支机构:

git fetch
git rebase origin/master master

在此

master
签出之后,我需要返回我的分行。有什么办法可以避免在 rebase 期间签出本地
master

git git-rebase
3个回答
3
投票

不幸的是,简短的答案是

来自文档

如果指定,git rebase 将在执行其他操作之前执行自动 git 切换。否则它保留在当前分支上。

这对于合并来说是相同的:您只在这些操作的签出分支上工作,因为理论上它们可能导致冲突状态,然后需要当场解决。


一种解决方法是将后续签出链接回别名中(如果变基返回错误,则使用

&&
来停止)。

# fm for "fresh master"
git config --global alias.fm '!git fetch && git rebase origin/master master && git checkout -'

1
投票

接受的答案在大多数情况下都有效,但如果 origin/master 和 master 是最新的,则 rebase 不会执行任何操作,并且使用

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


0
投票

如果您希望将更改重新基于您的分支,则无需签出

master
。您可以留在您的分支机构并执行 -

git fetch

然后

git rebase origin/master

这会将本地分支的提交重新定位到

origin/master
的提交之上。它不会更新您本地的
master

© www.soinside.com 2019 - 2024. All rights reserved.