Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git中快进其他跟踪分支?_Git - Fatal编程技术网

如何在git中快进其他跟踪分支?

如何在git中快进其他跟踪分支?,git,Git,我们正在使用我们所有人都使用的单一远程存储库模型。我们为新特性进行分支,并重新整合到主干分支中。我们的工作流程是,当其他功能集成到主干中时,我们应该将主干集成到工作分支中 因此,我们经常这样做: (branch) $ git commit -a -m"blah blah blah" (branch) $ git fetch # origin/trunk is updated (branch) $ git checkout trunk (trunk) $ git pull # trunk is

我们正在使用我们所有人都使用的单一远程存储库模型。我们为新特性进行分支,并重新整合到主干分支中。我们的工作流程是,当其他功能集成到主干中时,我们应该将主干集成到工作分支中

因此,我们经常这样做:

(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签出主干/git拉/git签出分支”循环。它通常与VisualStudio结合在一起,抱怨我的所有文件和项目在磁盘上都已更改,是否应该重新加载它们。两次结账。还有拉力。合并。合并是不可避免的,但由于git的工作方式,它应该能够在主干上进行快进,而不需要实际检查


但是我不知道这个命令,我的GoogleFoo让我失望了。有人知道怎么做吗?

您真的需要更新本地
中继
分支吗

只需
fetch origin/trunk
merge
直接在您正在处理的分支中将其合并即可。
这就是我们的建议:


在(向上投票)中提到:

作为:

您可以跳过合并,只需使用一行代码快速前进

它将本地分支
主干
快进到远程分支的头部

请参阅“”中的详细信息尝试以下操作:

$ git pull trunk branch
我同意,但我认为回答“如果您在另一个分支上,如何快速前进
master
”这个问题可能会很有趣。我不认为仅仅使用陶瓷命令就可以做到这一点,但这个脚本可以完成这项工作(显然,在您的情况下,您希望将
master
更改为
trunk
):


更新2012-10-20:这个脚本只是一个简单的例子;对于执行相同操作但用于将任意提交ish合并到本地分支(只要合并是快进的)的脚本,请参阅。

我认为最简单的避免
git签出主干的
git pull
git签出分支的方法是使用:


这正是你想要的-快进你的本地分支
trunk
到远程分支的负责人。

:)我不得不说,我有点害怕你在回复第一行提到的同名用户时碰巧提到了那篇帖子(谢谢!),所以你的建议是“git merge origin/trunk”而不是签出/拉/签出/合并舞蹈?下次出现这种情况时,我会试试。使用
git-fetch-upstream-trunk:trunk
可以跳过合并,只需使用一行程序快速前进。看。@Oliver说得好,我当时没看到你的答案(+1)。为了更具可见性,我在答案中加入了它。合并不适合重定正在进行的工作的场景,而Oliver的答案是这样的。首先签出分支,然后执行git pullgit://foo.com/someone/bar.git trunksll我的意思是,你应该能够一步到位,但如上所述,有些人认为这不是最好的主意。对不起,它并没有真正回答这个问题,因为它将当前分支与远程“主干”分支合并,我们希望将本地分支“主干”与远程分支“主干”合并(快进)当我在任何一个分支上运行并且没有修改它时。我认为git曾经做过类似的事情,但是当我在源代码中检查git-pull.sh时,我没有看到它仍然做的任何迹象。我只是使用了这个脚本-谢谢你的提示!我很惊讶这没有内置到git merge中。您可能会认为这是一个非常常见的用例。您可以使用
git branch-f master origin/master
,但您不想这样做:如果这不是一个快进合并,您将丢失提交和冲突;我认为我在那里的脚本也做了同样的事情,但是更加充实了,所以你可以安全地将它用作
git merge ff
@Jefromi:感谢你指出这一点-我已经用一个链接更新了我的答案。
git-fetch-origin-trunk:trunk
适合那些对通用“上游”术语不熟练的初学者。
$ git pull trunk branch
#!/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
git fetch upstream trunk:trunk