我如何一次性从远程拉到主机并从主机转换到我的功能分支?

时间:2013-07-12 21:47:18

标签: git

我有一个功能分支,我正在尝试使用远程主控更新。我也想让我的本地主人更新。我不是在掌握大师,但保持更新是件好事。

这是我的工作流程

(feature_branch)> git checkout master
(master)> git pull --rebase
(master)> git checkout feature_branch
(feature_branch)> git rebase master

我可以用更少的命令来做吗?

3 个答案:

答案 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:mastermaster,并且<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中的主分支。