在 git 中变基后不要签出分支
Don't checkout branch after rebase in git
我在我的分支上(不是 master),我需要在本地获取最新版本的 master
。我接下来仍然留在我的分支:
git fetch
git rebase origin/master master
master
签出后,我需要返回我的分支机构。有什么办法可以避免在 rebase 期间检查本地 master
?
不幸的是,简短的回答是没有。
来自doc :
If is specified, git rebase will perform an automatic git switch before doing anything else. Otherwise it remains on the current branch.
这对于合并也是一样的:您只在这些操作的已签出分支上工作,因为它们理论上可能导致冲突状态,然后需要解决现场
一种解决方法是将随后的检出链接到别名中(如果变基 returns 出错,则 &&
停止)。
# fm for "fresh master"
git config --global alias.fm '!git fetch && git rebase origin/master master && git checkout -'
如果您希望将更改重新定位到您的分支,则无需签出 master
。你可以留在你的分支上做 -
git fetch
然后
git rebase origin/master
这会将您本地分支的提交重新设置为 origin/master
提交的基础。它不会更新您的本地 master
.
接受的答案大部分时间都有效,但是如果 origin/master 和 master 是最新的,rebase 什么都不做,使用 git checkout -
会让你回到之前的任何分支。
解决方法是在 "rebasing".
之前检查两个引用之间的差异
此外,我认为我们可以通过使用函数别名使其更通用,即:
refresh = "!f() { \
git fetch \
&& git diff origin/ \
|| { \
git rebase origin/ \
&& git checkout - \
;} \
;}; f"
直接在配置文件中定义它更容易,因为 git config
命令会尝试转义引号并把事情搞砸。
通过这种方式,您可以执行 git refresh master
或任何其他分支。如有必要,您可以使用更短的名称重命名别名或使用双别名来同时拥有两者,即:
git config --global alias.rf refresh
别名的好主意我一定会使用它。谢谢@vitalii
我在我的分支上(不是 master),我需要在本地获取最新版本的 master
。我接下来仍然留在我的分支:
git fetch
git rebase origin/master master
master
签出后,我需要返回我的分支机构。有什么办法可以避免在 rebase 期间检查本地 master
?
不幸的是,简短的回答是没有。
来自doc :
If is specified, git rebase will perform an automatic git switch before doing anything else. Otherwise it remains on the current branch.
这对于合并也是一样的:您只在这些操作的已签出分支上工作,因为它们理论上可能导致冲突状态,然后需要解决现场
一种解决方法是将随后的检出链接到别名中(如果变基 returns 出错,则 &&
停止)。
# fm for "fresh master"
git config --global alias.fm '!git fetch && git rebase origin/master master && git checkout -'
如果您希望将更改重新定位到您的分支,则无需签出 master
。你可以留在你的分支上做 -
git fetch
然后
git rebase origin/master
这会将您本地分支的提交重新设置为 origin/master
提交的基础。它不会更新您的本地 master
.
接受的答案大部分时间都有效,但是如果 origin/master 和 master 是最新的,rebase 什么都不做,使用 git checkout -
会让你回到之前的任何分支。
解决方法是在 "rebasing".
之前检查两个引用之间的差异此外,我认为我们可以通过使用函数别名使其更通用,即:
refresh = "!f() { \
git fetch \
&& git diff origin/ \
|| { \
git rebase origin/ \
&& git checkout - \
;} \
;}; f"
直接在配置文件中定义它更容易,因为 git config
命令会尝试转义引号并把事情搞砸。
通过这种方式,您可以执行 git refresh master
或任何其他分支。如有必要,您可以使用更短的名称重命名别名或使用双别名来同时拥有两者,即:
git config --global alias.rf refresh
别名的好主意我一定会使用它。谢谢@vitalii