我习惯于在我正在处理的分支中运行 git pull 和其他命令。但是我已经建立了一个多人工作的开发服务器,所以我不想在做的时候必须切换分支。如果我想从我们都使用的 github 存储库更新开发服务器上的现有分支,那么正确的方法是什么?如果我运行命令 'git pull github branchname' 会简单地将分支拉到当前分支吗?
我能找到的所有 git 示例似乎都表明您首先运行“结帐分支名称”,然后执行拉取操作。我试图避免这种情况。正如我所说,这是一个现有的分支,我只想更新到最新版本。
我习惯于在我正在处理的分支中运行 git pull 和其他命令。但是我已经建立了一个多人工作的开发服务器,所以我不想在做的时候必须切换分支。如果我想从我们都使用的 github 存储库更新开发服务器上的现有分支,那么正确的方法是什么?如果我运行命令 'git pull github branchname' 会简单地将分支拉到当前分支吗?
我能找到的所有 git 示例似乎都表明您首先运行“结帐分支名称”,然后执行拉取操作。我试图避免这种情况。正如我所说,这是一个现有的分支,我只想更新到最新版本。
我一直在寻找同样的东西,最后在另一个 stackoverflow 帖子中找到了对我有用的答案:Merge, update, and pull Git branches without using checkouts
基本上:
git fetch <remote> <srcBranch>:<destBranch>
我遇到了同样的问题,需要提交或存储当前功能更改、签出master分支、执行pull命令确实将所有内容从远程工作区获取到本地master工作区,然后再次切换到功能分支并执行 arebase以使其与掌握。
为了完成这一切,将工作区保持在功能分支上并避免所有切换,我这样做:
git fetch origin master:master
git rebase master
它做得很好。
如果您希望在之后重新指出本地git fetch分支提示,则需要一些额外的步骤。
更具体地说,假设 github repo 有分支D, B, C, 和master(这个奇怪的分支名称集的原因稍后会很清楚)。您在主机上,并且在 github 存储库devhost所在的存储库中。origin您这样做git fetch了,这会带来所有对象和更新origin/D、、、origin/B和。到目前为止,一切都很好。但是现在您说您希望在本地分支机构, , ,和/或上发生一些事情?origin/Corigin/masterdevhostDBCmaster
我有这些明显的(无论如何对我来说)问题:
B)具有远程(github)repo 缺少的提交怎么办?它们应该被合并、重新定位还是……?C)并且工作目录和/或索引已修改但未提交怎么办?A) 和/或删除了分支 ( D) 怎么办?如果 (1) 的答案是“因为devhost实际上不是用于开发,而是一个本地镜像,它只是保留 github 存储库的本地可用副本,以便我们所有实际开发人员可以快速从中读取,而不是从缓慢读取github”,那么你想要一个“镜像”而不是“普通”回购。它不应该有工作目录,也许它也不应该接受推送,在这种情况下,剩下的问题就会消失。
如果有其他答案,(2-4)就会有问题。
无论如何,这是一种基于远程引用(git fetch -p例如在运行之后)更新本地引用的方法:
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
本... code here ...节内容取决于对问题 (2-4) 的回答。
利用
git fetch
反而。它会更新你的 repo 中的远程引用和对象,但只保留本地分支、HEAD 和工作树。