如何一次拉出所有分支 - 包括新创建的分支?

时间:2013-07-19 20:57:00

标签: git

我知道还有其他问题可以解决这个问题的变体。即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.

3 个答案:

答案 0 :(得分:4)

$ git remote update
$ git pull --all

应该这样做 - 虽然它不是1命令

答案 1 :(得分:0)

根据原始海报中有关他想要获取的遥控器的新信息更新了答案:

git fetch bitbucket
如果遥控器上有新分支,

将更新您的远程跟踪分支以及添加新分支。

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

这是一个别名,它将从bitbucket获取并更新远程跟踪分支和本地主分支:

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遥控器中不再存在的分支的过时远程跟踪分支。

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

refspec master:master表示在bitbucket上使用master分支,并使用它来更新本地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,则会从您添加到回购邮件中的所有远程设备中获取所有分支。它不会更新所有本地分支机构,但它是一个开始。

答案 2 :(得分:0)

git fetch all
也是一种非侵入式选项。