我们正在使用我们所有人都使用的单个远程存储库的模型。我们分支新功能并重新集成到主干分支。我们的工作流程是,当其他功能集成到主干中时,我们应该从主干集成到我们的工作分支。
因此,我们这样做并不罕见:
(branch) $ git commit -a -m"blah blah blah"
(branch) $ git fetch # origin/trunk is updated
(branch) $ git checkout trunk
(trunk) $ git pull # trunk is fast-forwarded to current version of origin/trunk.
(trunk) $ git checkout branch
(branch) $ git merge trunk
(branch) $ git push
我不喜欢“git checkout trunk / git pull / git checkout branch”循环。它通常与Visual Studio合并,抱怨我的所有文件和项目都在磁盘上发生了变化,并且应该重新加载它们。两个结帐。而拉。合并。合并是不可避免的,但由于git如何工作,它应该能够在主干上进行快进,而不需要检查它。
但是我不知道这个命令,而我的google-foo在这方面让我失望了。谁知道怎么做?
答案 0 :(得分:36)
我认为避免git checkout trunk
,git pull
,git checkout branch
周期的最简单方法是使用this answer:
git fetch upstream trunk:trunk
这完全符合您的要求 - 将您的本地分支trunk
快进到远程分支的HEAD。
答案 1 :(得分:22)
您真的需要更新本地trunk
分支吗?
只需fetch origin/trunk
和merge
直接在您正在处理的分支机构中
这是Mark Longair的建议: git: fetch
and merge
, don’t pull
。
git fetch upstream trunk:trunk
作为he comments:
你可以跳过合并,只需快进,使用单行。
它会将本地分支trunk
快进到远程分支的HEAD。
答案 2 :(得分:8)
我同意VonC's answer,但认为回答“如果你在另一个分支上你如何快进master
这个问题可能会很有趣?”无论如何。我不认为只使用瓷器命令就可以做到这一点,但是这个脚本完成了这项工作(显然你想在你的案例中将master
更改为trunk
):
#!/bin/sh
BRANCH=master
NEWER=origin/master
if [ x"$(git symbolic-ref HEAD)" = x"refs/heads/$BRANCH" ]
then
echo "This doesn't make sense if you're already on the branch '$BRANCH'"
echo "Just run: git merge $NEWER"
exit 1
fi
BRANCH_HASH=$(git rev-parse $BRANCH)
NEWER_HASH=$(git rev-parse $NEWER)
MERGE_BASE=$(git merge-base $BRANCH_HASH $NEWER_HASH)
if [ "$MERGE_BASE" = "$BRANCH_HASH" ]
then
git update-ref "refs/heads/$BRANCH" "$NEWER_HASH" "$BRANCH_HASH"
else
echo "$BRANCH can't be fast-forwarded to $NEWER"
exit 1
fi
更新2012-10-20:这个脚本只是一个简单的例子;对于执行相同操作但用于将任意commit-ish合并到本地分支的脚本(只要合并是快进的),请参阅Jefromi's answer to a similar question。
答案 3 :(得分:-4)
尝试以下方法:
$ git pull trunk branch