gpt4 book ai didi

Git Pull 不执行 Git Fetch

转载 作者:太空狗 更新时间:2023-10-29 12:45:00 26 4
gpt4 key购买 nike

我的理解一直是git pull本质上是git fetchgit merge ...的结合但是我遇到过多次 pull ,然后比较显示不属于我的更改,直到我也进行提取:

(在分支 blob 上):

git pull origin blob
git diff origin/blob <- shows a bunch of changes that aren't from my but were just pulled from others
git fetch
git diff origin/blob <- shows just my changes

我对 pull 的理解有误吗?

最佳答案

这是一个常见的混淆来源,以至于 #git IRC channel 有一个 jar 头帮助文本,称为 !pull4 :

We recommend against using 'git fetch/pull <remote> <refspec>' (i.e. with branch argument), because it doesn't update the <remote>/<branch> ref. The easy way to fetch things properly is to get everything: 'git fetch' or 'git pull' are sufficient if you have one remote; otherwise we recommend 'git fetch <remote>' (plus 'git merge <remote>/<branch>' if you wanted to pull/merge).

这里发生的是 git pull没有参数做 git fetch在“默认 Remote ”(通常为 origin )上,然后是 git merge s 对应于你当前本地分支的远程分支。 git pull <remote>对明确指定的 Remote 做同样的事情。然而,“四字 pull ”,git pull <remote> <branch> ,将该分支提取到一个临时位置,FETCH_HEAD更新您的跟踪分支,然后 merge FETCH_HEAD进入您当前的分支。

因此,通过使用 git pull origin blob ,你说的是“我想将远程 blob 上的最新版本 origin 分支 merge 到我当前的分支中,而不更新我的任何跟踪分支或获取任何其他数据”。

如果你的分支 merge 配置是正确的(它们可能是,因为 git clonegit checkout 尝试自动设置它们),你可以只 git pullgit pull origin它会获取所有内容,然后 merge 与您当前 checkout 的分支对应的分支。如果您想要更明确的控制,请使用 git fetch然后 git merge . git pull <remote> <branch>很少是您想要的。

(git fetch 在您的示例中修复问题的原因是,在 pull 之后,您的本地分支已使用最新的远程提交进行了更新,但跟踪分支尚未更新。git fetch 更新了跟踪分支有了这些提交,此时差异又开始有意义了。)

关于Git Pull 不执行 Git Fetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18922702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com