本地分支落后远程staging多提交时,如何基于staging变基?
嘿,我完全懂你遇到的这种循环困扰!其实问题出在你执行变基时,本地的origin/staging跟踪分支并没有同步到远程最新的状态——要么是你变基用的是旧的远程快照,要么是变基完成后远程staging又有新提交推上来了,自然会显示落后。下面是几个能让你一步到位、不管落后多少都直接基于最新staging变基的方法:
方法1:变基前先同步远程跟踪分支
不用切换到staging分支,直接拉取远程staging的最新提交到本地的origin/staging引用:
git fetch origin staging
然后再执行变基:
git rebase -i origin/staging
git fetch只会更新本地的远程跟踪分支,完全不会影响你的本地staging分支或者当前的feature分支,这样你就能确保变基是基于远程staging的最新版本。
方法2:合并成一条命令一步完成
嫌分开敲两次命令麻烦?可以把fetch和变基合并成一条命令:
git fetch origin staging && git rebase -i origin/staging
这条命令会先同步远程staging的最新状态,紧接着就基于最新的origin/staging执行交互式变基,一次操作搞定所有。
方法3:自定义Git别名简化操作
如果你经常需要对staging分支做变基,可以给Git加个自定义别名,省得每次敲长命令。打开你的.gitconfig文件(一般在用户根目录下),添加以下内容:
[alias] rebase-staging = "!git fetch origin staging && git rebase -i origin/staging"
之后你只需要在feature分支下敲:
git rebase-staging
就能自动完成“同步远程staging+交互式变基”的整套流程,超级省心!
为什么之前会出现落后的情况?
简单来说,origin/staging是本地存储的远程staging分支的快照,如果你很久没执行fetch或者pull,这个快照就会落后于真正的远程staging。当你基于旧快照变基后,远程staging其实已经有新提交了,GitLab自然会提示你的feature分支落后。所以核心就是变基前一定要确保本地的远程跟踪分支是最新的。
内容的提问来源于stack exchange,提问作者Norayr Ghukasyan

