9

我知道还有其他问题可以解决这个问题的变体。也就是这个

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

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

我如何在 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.

4

3 回答 3

5
$ git remote update
$ git pull --all

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

于 2013-07-19T21:02:41.523 回答
0

git 获取所有
也是一种非侵入性的选择。

于 2013-07-20T01:34:23.363 回答
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. 完毕!

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

refspec+refs/heads/*:refs/remotes/bitbucket/*意味着从 bitbucket 获取所有分支,并将它们映射到我们的远程跟踪分支,以便在本地 repo 中的 bitbucket。前面+意味着它将允许强制更新,这对于您的远程跟踪分支通常是可以的。

refspecmaster:master意味着获取masterbitbucket 上的分支,并使用它来更新您的本地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,这将从您添加到您的存储库的所有遥控器中获取所有分支。它不会更新您所有的本地分支机构,但这是一个开始。

于 2013-07-19T23:00:21.563 回答