我们正在使用我们所有人都使用的单个远程存储库的模型.我们分支新功能并重新集成到主干分支.我们的工作流程是,当其他功能集成到主干中时,我们应该从主干集成到我们的工作分支.
因此,我们做的事情并不少见:
(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
Run Code Online (Sandbox Code Playgroud)
我不喜欢"git checkout trunk/git pull/git checkout branch"循环.它通常与Visual Studio合并,抱怨我的所有文件和项目都在磁盘上发生了变化,并且应该重新加载它们.两个结帐.而拉.合并.合并是不可避免的,但由于git如何工作,它应该能够在主干上进行快进,而不需要检查它.
但我不知道这个命令,而我的google-foo在这方面让我失望了.谁知道怎么样?
Oli*_*ver 38
我认为,最简单的避免的方式git checkout trunk
,git pull
,git checkout branch
循环就是用这样的回答:
git fetch upstream trunk:trunk
Run Code Online (Sandbox Code Playgroud)
这完全符合您的要求 - 将您的本地分支快进trunk
到远程分支的HEAD.
Von*_*onC 24
你真的需要更新本地trunk
分支吗?
只要fetch origin/trunk
和merge
它直接在分支您正在使用.
这就是Mark Longair的建议:git:fetch
而且merge
,不是pull
.
git fetch upstream trunk:trunk
Run Code Online (Sandbox Code Playgroud)
正如他评论说:
您可以使用单线程跳过合并并简单地快进.
它确实将本地分支快进trunk
到远程分支的HEAD.
查看更多" git:更新本地分支而不检查它? "
我同意VonC的回答,但认为回答" 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
Run Code Online (Sandbox Code Playgroud)
更新2012-10-20:这个脚本只是一个简单的例子; 对于执行相同但是将任意commit-ish合并到本地分支的脚本(只要合并是快进的),请参阅Jefromi对类似问题的回答.
归档时间: |
|
查看次数: |
8162 次 |
最近记录: |