我知道还有其他问题可以解决这个问题的变体。即this一个。
问题在于答案假设所有本地分支机构都在跟踪某个远程分支(甚至远程存在)。
我现在面临的问题是我正在与一个远程团队合作,有时他们可能会创建一个我不在本地的远程分支。
如何在1命令中将最新更改拉到我在本地跟踪的分支上,并拉出我未跟踪的所有分支的最新版本。
当我执行git pull --all
时,只需拉出最新的跟踪分支。
感谢。
修改
我有两个遥控器 - bitbucket
和heroku
。
我想从我的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 :(得分: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也是一种非侵入式选项。