获取远程分支和远程引用:git fetch remote分支和remote引用

14

如何获取远程分支并更新git本地引用,而不影响当前分支?例如,如果我执行以下操作:

$ git pull origin master

origin/master 已经合并到我的当前分支,但这仍然不起作用。

$ git fetch origin master

那么我制止

$ git branch -r -v
origin/HEAD   -> origin/master
origin/master 7cf6ec5 test 02

那个 origin/master 引用"7cf6ec5 test 02" 落后了。真正的 origin/master 是一个"XXXXXX test 03"。 git fetch 只将更改拉到 FETCH_HEAD 中,它没有上传本地的 origin/master 引用。更新该引用的步骤是什么?

注:

$ git fetch origin

想要获取所有远程引用并更新它们,但不幸的是这会带来很多混乱。(我不希望有别人的30-50个随机分支知道我的分支,也不希望知道别人的分支)并且(b)当在源头删除分支时,下一次执行“git fetch origin”命令时这些引用不会在本地被删除,这意味着路径最终会被垃圾填满。

问题是,如何仅获取一个分支并在本地更新其引用?

3个回答

11

我想我正在寻找的就是这个

$ git fetch origin master:refs/remotes/origin/master

相比于“git fetch origin master”,这似乎有效,因为我确实看到参考更新了。

有什么理由认为这是错误的答案吗?我应该害怕什么吗?


2

您可以在git fetch命令中始终提供一个refspec。特别是,如果您想更新other-branch,可以执行以下操作:

git fetch origin other-branch:other-branch

这将从远程仓库获取refs/heads/other-branch分支的最新提交,并将其放入同名的本地分支。

另一种方法是直接执行以下命令:

git fetch origin other-branch

然后重新创建本地分支:

git branch -l -f other-branch -t origin/other-branch
< p > -l 作为安全机制存在。它会创建一个引用日志条目,以便您在需要时可以返回到以前的版本。 < /p >

1
git fetch origin

这将获取所有远程分支并更新它们的远程跟踪分支。

现在你可以做两件事中的任何一件

git checkout other-branch
git merge origin/other-branch
git checkout -

或者

git push . origin/other-branch:other-branch

如果您知道这将是一个快速合并,那么最后一种选项是可以的。


1
谢谢。我该如何只获取和更新origin/master?我不想要远程仓库中的所有30或50个分支。实际上,我刚刚尝试了git fetch origin。然后我删除了一个在origin上的分支。然后我再次执行了git fetch origin,但是当我执行git branch -r -v时,我发现在我的本地仓库中仍然存在被删除的分支引用。 - gman
1
跟踪分支在获取(fetch)时不会被删除。你需要使用git remote prune来实现。 - Adam Dymitruk
git fetch origingit fetch --all 有什么区别? - jww
1
如果你有多个远程仓库,使用 --all 将会更新每一个远程仓库的跟踪分支。 - Adam Dymitruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接