我习惯在我正在处理的分支中运行git pull和其他命令。但我已经设置了一个可供多人工作的开发服务器,所以我不想在我这样做时切换分支。如果我想从我们都使用的github存储库更新开发服务器上的现有分支,那么这样做的正确方法是什么?如果我运行命令'git pull github branchname',那么只需将分支拉入当前分支?
我能找到的所有git示例似乎都表明你首先运行'checkout branchname',然后执行拉动。我试图避免这种情况。正如我所说,这是一个现有的分支,我只想更新到最新版本。
答案 0 :(得分:105)
我一直在寻找相同的东西,最后在另一个stackoverflow帖子中找到了对我有用的答案:Merge, update, and pull Git branches without using checkouts
基本上:
git fetch <remote> <srcBranch>:<destBranch>
答案 1 :(得分:8)
我遇到了同样的问题,必须提交或隐藏当前功能更改,签出 master 分支,执行pull
命令可以将一切从远程工作区转移到本地master
,然后再次切换到功能分支并执行rebase
以使其与master保持最新。
要完成所有操作,请将工作区保留在功能分支上,并避免所有切换,我这样做:
git fetch origin master:master
git rebase master
效果很好。
答案 2 :(得分:3)
使用
git fetch
代替。它会更新repo中的远程引用和对象,但只留下本地分支,HEAD和工作树。
答案 3 :(得分:-1)
如果您希望在git fetch
之后重新指向本地分支提示,则需要执行一些其他步骤。
更具体地说,假设github repo具有分支D
,B
,C
和master
(这个奇数分支名称集的原因将是明确的一会儿)。您在主持人devhost
上,并且您在一个仓库中origin
是github仓库。您执行git fetch
,它会带来所有对象和更新origin/D
,origin/B
,origin/C
和origin/master
。到现在为止还挺好。但是现在你说你希望在devhost
,本地分支D
,B
,C
和/或{{ 1}}?
我有这些显而易见的(对我来说)问题:
master
)提交了远程(github)repo缺少的内容怎么办?它们应该合并,重新定位还是......?B
)并且工作目录和/或索引已修改但未提交,该怎么办?C
)和/或分支已删除(A
),该怎么办?如果(1)的答案是“因为D
实际上不是用于开发,而是一个本地镜像,它只保留github repo的本地可用副本,以便我们所有的实际开发人员都可以读取从它快速而不是从github慢慢阅读“,然后你想要一个”镜像“而不是”正常“的回购。它不应该有一个工作目录,也许它不应该接受推送,在这种情况下剩下的问题就会消失。
如果还有其他答案,(2-4)会出现问题。
在任何情况下,这是一种基于远程引用来解决更新本地引用的方法(例如在运行devhost
之后):
git fetch -p
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
部分的内容取决于问题的答案(2-4)。
答案 4 :(得分:-4)
编辑:使用'git pull'它将从repo获取所有分支,并且还更新到最新if if分支在本地系统上仅针对当前分支退出。 注意:git pull等同于fetch + merge,它获取所有分支但仅合并当前分支。