我有一个功能分支,我正在尝试使用远程主控更新。我也想让我的本地主人更新。我不是在掌握大师,但保持更新是件好事。
这是我的工作流程
(feature_branch)> git checkout master
(master)> git pull --rebase
(master)> git checkout feature_branch
(feature_branch)> git rebase master
我可以用更少的命令来做吗?
答案 0 :(得分:2)
作为Nathan suggested,您可以创建一个Git别名,将一堆命令合并为一个:
$ git config --global alias.sync \
"!git fetch <remote> master:master && git rebase master"
# With the feature branch checked out
$ git sync
这会设置一个别名sync
,它首先使用仅限快进的合并从远程master
更新本地master
。然后它会在当地feature_branch
之上重新定位您当前的分支(确保它是master
)。
使用git fetch master:master
的好处是,在从远程仓库更新之前,它不需要您检查master
分支。这就是Git fetch docs解释语法如何工作的方式:
<refspec>
参数的格式是可选加+
,后跟源引用<src>
,后跟冒号:
,后跟目标引用{ {1}}。获取与
<dst>
匹配的远程引用,如果<src>
不是空字符串,则使用<dst>
快速转发与其匹配的本地引用。如果使用了可选的加号<src>
,则即使本地引用不会导致快进更新,也会更新本地引用。
因此,在我给出的示例中,+
表示从远程仓库获取git fetch master:master
为master
,并且<src>
非空(这是正确的)手边,本地<dst>
),Git尝试使用master
快进合并<dst>
。
答案 1 :(得分:1)
如果你的主人不在原点/主人之前,那么你可以用一个较少的命令来做,虽然它确实有点hacky:
git fetch
git push . origin/master:master
git rebase master
如果你的主人领先于原点/主人,那么我不知道有什么比你正在做的更快的方法。当然,你可以为它做一个别名或shell函数。
编辑:Cupcake's answer绝对是最好的解决方案,现在我知道fetch中的refspec会启动ff合并!
答案 2 :(得分:1)
(master)> git checkout feature_branch
(feature_branch)> git rebase master
可以组合成一个命令:
(master)> git rebase master feature_branch
(feature_branch)>
如果您配置
,则可以在--rebase
来电中删除git pull
rebase = true
用于.git / config中的主分支。