[英]When I do “git pull origin master --rebase” from a feature branch, I receive outdated incoming code
[英]How do I pull and rebase from remote to master and rebase from master to my feature branch in one shot?
我有一个功能分支,我正在尝试使用远程主站进行更新。 我也想让我的本地主人更新。 我不是在做高手,但保持更新是件好事。
这是我的工作流程
(feature_branch)> git checkout master
(master)> git pull --rebase
(master)> git checkout feature_branch
(feature_branch)> git rebase master
我可以用更少的命令来做吗?
正如Nathan建议的那样 ,你可以创建一个Git别名来将一堆命令组合成一个:
$ git config --global alias.sync \
"!git fetch <remote> master:master && git rebase master"
# With the feature branch checked out
$ git sync
这将设置一个别名sync
,该sync
首先使用仅快进合并从远程master
更新本地master
。 然后它会在你当地的master
之上重新安排你当前的分支(确保它是feature_branch
)。
使用git fetch master:master
的优点是,在从远程仓库更新master
分支之前,它不需要您检查master
分支。 这就是Git提取文档解释语法如何工作的方式:
<refspec>
参数的格式是可选的+
,后跟源ref<src>
,后跟冒号:
,后跟目标ref<dst>
。获取与
<src>
匹配的远程引用,如果<dst>
不是空字符串,则使用<src>
快速转发与其匹配的本地引用。 如果使用可选的plus+
,则即使不导致快进更新,也会更新本地引用。
因此,在我给出的示例中, git fetch master:master
表示从远程repo中获取master
作为<src>
,并且由于<dst>
是非空的(它是右侧,本地master
),Git尝试快速-forward使用<src>
合并<dst>
<src>
。
如果你的主人不在原点/主人之前,那么你可以用一个较少的命令来做,虽然它确实有点hacky:
git fetch
git push . origin/master:master
git rebase master
如果你的主人领先于原点/主人,那么我不知道有什么比你正在做的更快的方法。 当然,您可以为它创建别名或shell函数。
编辑: Cupcake的答案肯定是最好的解决方案,现在我知道fetch中的refspec会启动ff合并!
(master)> git checkout feature_branch
(feature_branch)> git rebase master
可以组合成一个命令:
(master)> git rebase master feature_branch
(feature_branch)>
如果你配置,你可以在git pull
调用中摆脱--rebase
rebase = true
对于.git / config中的主分支。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.