2013-07-19 38 views
3

我知道还有其他问题可以解决这个问题的变种。即this一。我如何一次拉出所有分支 - 包括新创建的分支?

问题在于答案假定所有本地分支已经在跟踪某个远程分支(甚至远程存在)。

我现在面临的问题是我正在与一个远程团队合作,有时他们可能会创建一个本地没有的远程分支。

如何在1条命令中将最新的更改同时拉到我本地跟踪的分支上,并且拉出了我没有跟踪的所有分支的最新版本。

当我做git pull --all,只是拉我的最新追踪分支。

谢谢。

编辑:

我有两个遥控器 - bitbucketheroku

我想从我的bitbucket遥控器中拉出所有分支....不是从我的heroku遥控器。

我这样做:

$ git pull bitbucket --all fatal: fetch --all does not take a repository argument

这:

$ git pull --all bitbucket fatal: fetch --all does not take a repository argument

而且这样的:

$ git pull bitbucket Password: You asked to pull from the remote 'bitbucket', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.

+0

请更新您的问题,提供更多关于您想要什么(您想要或不想从中获取哪些遥控器)的详细信息,您尝试过的命令以及结果。 – 2013-07-19 23:47:00

+0

@Cupcake我已经做到了。 – marcamillion

回答

3
$ git remote update 
$ git pull --all 

应该做的 - 虽然它不是1级的命令

+0

问题是我有2个遥控器。 Heroku和bitbucket。我如何考虑这一点?当我做'git远程更新'时,它检查的第一个远程是Heroku - 我不希望它做。 – marcamillion

+0

'git remote update bitbucket'应该得到一个最新的bitbucket – exussum

+0

如何指定从'bitbucket'中取出? '$ git pull bitbucket --all fatal:fetch --all不采取存储库参数'会发生什么。如果我只是做'git pull --all',它会首先尝试从'heroku'中取出。 – marcamillion

0
基于从关于楼主哪个远程他想获取新情况

更新答案:

git fetch bitbucket 

将更新您的远程跟踪分支以及如果远程有新的分支,请添加新的分支。

fetch不会更新您的本地分支,除非您也传递给它一个refspec,它只会在这种情况下进行快进或强制更新,而不是真正的合并。

这里是一个别名将从到位桶获取和更新两个远程追踪分支和当地主分支:

sync = "!git checkout --quiet head && git fetch --prune bitbucket +refs/heads/*:refs/remotes/bitbucket/* master:master && git checkout --quiet - || git checkout --quiet -" 

你使用这样的:git sync。完成!

--prune选项提取意味着它也将删除过时的远程跟踪分支不再存在于你的bitbucket远程。

参考+refs/heads/*:refs/remotes/bitbucket/*意味着从bitbucket中获取所有分支,并将它们映射到我们的远程跟踪分支以获取本地回购库中的bitbucket。前面的+意味着它将允许强制更新,这通常适用于您的远程跟踪分支。

该参考master:master意味着采取master在bitbucket分支,并使用它来更新您的本地master分支。由于没有+,它不会执行强制更新。如果您想允许,请在前面添加一个+,如下所示:+master:master

git checkout --quiet head是必要的,如果你碰巧有你的本地master检出,因为否则fetch将不会更新它,而检出。如果您在运行该命令时碰巧检出了它,它将检出您直接提交的提交(这是head的含义),因此master分支标签可以在您不在其上时移动。

git checkout --quiet - || git checkout --quiet -会检查您运行git checkout --quiet head之前的任何分支,无论分支的获取和更新是否工作。 (实际上我在失败的时候遇到了问题,我不知道为什么......如果你最终处于分离状态,只需运行git checkout <branch name>即可)。


老答案:

如果使用git fetch --all,将从所有你已经添加到您的回购协议遥控器获取所有分支机构。它不会更新您所有的本地分支机构,但这只是一个开始。

+1

我在”你永远不应该('永远不会','很好,几乎没有')使用无论如何拉“营自己,所以我认为这是一个功能。 :-) – torek

+0

好吧,我不想从所有遥控器中拉出所有分支。我只想从1个遥控器拉出所有分支。我怎么用'git fetch'来做到这一点? – marcamillion

+0

@marcamillion'git fetch '应该给你你想要的。 – 2013-07-20 03:14:53

0

git fetch all
也是非侵入性选项。