gpt4 book ai didi

git - git pull 真的是 git fetch + git merge 吗?

转载 作者:行者123 更新时间:2023-12-04 12:31:13 27 4
gpt4 key购买 nike

我在以下沙箱中练习 git:https://learngitbranching.js.org/?NODEMO

我在两个单独的 session 中运行了两组命令。第一组命令顺序如下:

git clone
git checkout -b feature
git push
git fakeTeamwork main 1
git fakeTeamwork feature 1
git pull

第二组命令顺序类似,但我在最后使用 git fetch + git merge 代替:

git clone
git checkout -b feature
git push
git fakeTeamwork main 1
git fakeTeamwork feature 1
git fetch
git merge o/feature

如果 git pull = git fetch + git merge,为什么两个结果不同? git pull 似乎没有更新所有远程跟踪分支。这只是沙箱的一个缺陷,还是这实际上是 git 中发生的事情?

注意:命令 git clonegit fakeTeamwork 只是为沙箱构建的命令

谢谢!

最佳答案

It seems that git pull does not update all the remote tracking branches.

可以发生,是的。它确实发生在:

  • git pull 运行 git fetch origin master,例如,
  • git fetch origin master 因此只更新 origin/master

此外,在 1.8.4 之前的 Git 版本中,一些 git fetch 操作根本不会更新任何远程跟踪名称。这里 git fetch origin masterorigin/master 没有影响。

除了这些,我们还有其他几个特例:

  • 如果 git pull 被配置或被告知运行 git rebase,它使用的第二个命令是 git rebase,而不是 git merge 。因此,明显的替代品是 git fetch 后跟 git rebase。不过,这里的一些细节甚至更多地依赖于 Git 版本:特别是,git pullgit rebase --fork 之前为 rebase 实现了 --fork-point 模式-point 存在(实际的 --fork-point 选项首先出现在 Git 1.9 中,但是 git pull 从某个 1.6 版本开始做特殊的工作——我查了一下一个精确的版本,但现在使用的最古老的 Git 似乎是用于 CentOS 的,它在某些发行版中包含一些 Git 1.7 版本。
  • 有一个非常的特殊情况:如果您创建一个空存储库,添加一个远程,然后运行 ​​git pull,则还没有现有的分支。 (稍后您可以使用孤立分支再次触发这种情况。)在这种情况下,git pull 运行专门的 git checkout 而不是 merge 或 rebase 。

分支的 upstream 设置在这里很重要,这取决于您传递给 git pull 或传递给 fetch 和第二个命令的参数。一般来说,这些大多数最终以相同的方式工作,除了你注意到一些远程跟踪名称有时不会更新的警告。

关于git - git pull 真的是 git fetch + git merge 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68934976/

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