两者之间有什么区别?git pullgit fetch?


当前回答

我们简单地说:

git pull == git fetch + git merge

如果你逃跑git pull中,您不需要将数据合并到本地数据。如果运行git fetch这意味着你必须跑git merge获取本地机器的最新代码。 否则, 本地机器代码不会在不合并的情况下被更改 。

所以在 Git Gui 中, 当您获取时, 您必须合并数据 。 获取本身不会在本地修改代码 。 您可以检查当您通过一次获取并查看来更新代码时, 是否更新了代码; 代码不会改变 。 然后您将合并... 您将会看到修改后的代码 。

其他回答

Git允许在较新的承诺之后适用按时间顺序排列的旧承诺。 因此,存放库之间转移承诺的行为分为两步:

  1. 正在从远程分支复制新承诺, 复制本地副本中的此远程分支 。

    (收回业务)master@remote >> remote/origin/master@local

  2. 整合对地方分支机构的新承诺

    (内购外业务)remote/origin/master@local >> master@local

第二步有两种方法,你可以:

  1. 在上一个共同祖先之后,将本地分支叉到叉口,并添加与本地仓库独特的承诺平行的新承诺,通过合并承诺最终完成,关闭叉口。
  2. 在上一个共同祖先后插入新承诺,并重新应用本地仓库独有的承诺。

git术语术语,第1步是git fetch,第2步是git mergegit rebase

git pullgit fetchgit merge

  • git pull获取承诺后尝试自动合并 。上下文敏感,因此所有被拉动的承诺都将合并为您目前活跃的分支。git pull自动合并承诺未经审查,而不先审查。。如果你不仔细管理自己的分支,你可能会遇到频繁的冲突。

  • git fetch收集当前分支中不存在的目标分支的任何承诺,并将其存储在本地仓库中然而,它不会与您当前分支合并。如果您需要不断更新您的仓库,但正在研究一些更新文件时可能中断的文件。要将承诺整合到当前分支中,您必须使用git merge之后。

这张图能帮上忙git pull基本上等于git fetch时当时git merge

This graphic could be of help. git pull is essentially equivalent to git fetch then git merge

重要的是,将设计理论与SVN这种较传统的源控制工具的理论加以对比。

Subversion 是用客户端/ 服务器模型设计和构建的。 服务器是一个单一的仓库, 有几个客户可以从服务器上获取代码, 工作, 然后将其发送到服务器 。 假设客户总是可以在服务器需要操作时与服务器联系 。

Git 的设计是为了支持一个更分散的模型,而不需要一个中央存储库(尽管如果您愿意,您肯定可以使用一个)。 Git 的设计也是为了让客户和“服务器”不必同时上网。 Git的设计是为了让不可靠的链接上的人可以通过电子邮件交换代码,甚至可以。可以完全断开工作,烧掉CD,通过 git 交换代码。

为了支持此模型 git , 维持一个包含您的代码的本地仓库, 以及一个反映远程仓库状态的附加本地仓库。 通过保存远程仓库的副本, git 可以在本地找到所需的更改, 即使远程仓库无法到达 。 稍后当您需要将更改发送到其他人时, git 也可以从远程仓库已知的时间点将其转换为一组更改 。

  • git fetch是命令 上面写着"把我的远程仓库的本地副本更新到最新"

  • git pull将远程存储库的更改 带到我保存自己代码的地方

通常为git pull这样做的方式是:git fetch以更新远程存储库的本地副本,然后将修改合并到自己的代码存储库中,并可能合并到工作副本中。

需要铭记的是,至少有至少三份三份工作站上的一个工程。 一个副本是您自己的存储库, 并有您自己的承诺历史。 第二个副本是您正在编辑和构建的工作副本。 第三个副本是您的远程存储库的本地“ cashed” 副本 。

git-pull - Fetch from and merge with another repository or a local branch
SYNOPSIS

git pull   …
DESCRIPTION

Runs git-fetch with the given parameters, and calls git-merge to merge the 
retrieved head(s) into the current branch. With --rebase, calls git-rebase 
instead of git-merge.

Note that you can use . (current directory) as the <repository> to pull 
from the local repository — this is useful when merging local branches 
into the current branch.

Also note that options meant for git-pull itself and underlying git-merge 
must be given before the options meant for git-fetch.

如果你想要合并历史,你会拉拉, 你会拉拉,你会拉拉拉,如果你只是"想要的cotz" ,因为有人一直在标记 一些文章在这里。