我在我的分支(不是主分支)上,我需要在本地获取最新版本的
master
。接下来我仍然留在我的分支机构:
git fetch
git rebase origin/master master
在此
master
签出之后,我需要返回我的分行。有什么办法可以避免在 rebase 期间签出本地master
?
不幸的是,简短的答案是不。
来自文档:
如果指定,git rebase 将在执行其他操作之前执行自动 git 切换。否则它保留在当前分支上。
这对于合并来说是相同的:您只在这些操作的签出分支上工作,因为理论上它们可能导致冲突状态,然后需要当场解决。
一种解决方法是将后续签出链接回别名中(如果变基返回错误,则使用
&&
来停止)。
# fm for "fresh master"
git config --global alias.fm '!git fetch && git rebase origin/master master && git checkout -'
接受的答案在大多数情况下都有效,但如果 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
如果您希望将更改重新基于您的分支,则无需签出
master
。您可以留在您的分支机构并执行 -
git fetch
然后
git rebase origin/master
这会将本地分支的提交重新定位到
origin/master
的提交之上。它不会更新您本地的 master
。