没有结帐的Git拉?

时间:2013-09-17 18:46:39

标签: git

我习惯在我正在处理的分支中运行git pull和其他命令。但我已经设置了一个可供多人工作的开发服务器,所以我不想在我这样做时切换分支。如果我想从我们都使用的github存储库更新开发服务器上的现有分支,那么这样做的正确方法是什么?如果我运行命令'git pull github branchname',那么只需将分支拉入当前分支?

我能找到的所有git示例似乎都表明你首先运行'checkout branchname',然后执行拉动。我试图避免这种情况。正如我所说,这是一个现有的分支,我只想更新到最新版本。

5 个答案:

答案 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具有分支DBCmaster(这个奇数分支名称集的原因将是明确的一会儿)。您在主持人devhost上,并且您在一个仓库中origin是github仓库。您执行git fetch,它会带来所有对象和更新origin/Dorigin/Borigin/Corigin/master。到现在为止还挺好。但是现在你说你希望在devhost本地分支DBC和/或{{ 1}}?

我有这些显而易见的(对我来说)问题:

  1. 为什么您是否希望更新所有分支的提示?
  2. 如果某个分支(例如master)提交了远程(github)repo缺少的内容怎么办?它们应该合并,重新定位还是......?
  3. 如果您在某个分支上(例如B)并且工作目录和/或索引已修改但未提交,该怎么办?
  4. 如果远程仓库添加了新分支(C)和/或分支已删除(A),该怎么办?
  5. 如果(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,它获取所有分支但仅合并当前分支。