Git pull 和 Git fick 之间有什么区别?


当前回答

实际上 Git 保有一份您自己的代码副本和远程仓库 。

命令 git 抓取时通过从远程仓库获取数据更新本地副本。 我们需要这个数据的原因是, 其他人可能对代码做了一些修改, 您想要不断更新自己 。

命令 Git 拖动将远程仓库的更改带到您保存您自己的代码的位置。 通常, git 拖动这样做的方式是先做一个“ git 抓取” , 将远程仓库的本地副本更新为最新版本, 然后将修改合并到您自己的代码仓库, 并有可能将您的工作副本合并到您自己的代码仓库中 。

其他回答

我花了一点点时间才明白有什么区别,但这只是一个简单的解释。你的当地主人是个分支。

当您克隆一个仓库时, 您会把整个仓库带回本地主机 。 这意味着在那个时候您有一个源代码/ 源代码/ 源代码指针到 HEAD , 主人指向同一个主目录 。

当您开始工作并承诺将主指针推进到 HEAD + 您的承诺。 但是源指针/主指针仍然指向您克隆时是什么。

因此,区别在于:

如果您做一个 Git 抓取它, 它只会获取远程仓库( GitHub) 的所有更改, 并将来源/ 指针移到 HEAD 。 与此同时, 您的本地分支管理员会一直指向它的位置 。 如果您做一个 Git 拉动, 它基本上会( 如前文所解释的) 抓取并合并您主分支的任何新更改, 并将指针移到 HEAD 。

git pull 尝试在获取承诺后自动合并 。 这是上下文敏感, 所以所有被拉过的承诺都将合并到您当前活动的分支中 。 git pull 自动合并承诺而不让您首先审查它们。 如果您不小心管理您的分支, 您可能会遇到经常的冲突 。 git 获取从目标分支中收集当前分支中不存在的任何承诺, 并将其存储在您的本地仓库中 。 但是, 它不会与当前分支合并 。 如果您需要更新您的仓库, 这特别有用 。 如果您需要更新文件, 但它正在处理一些可能中断的任务 。 要将承诺整合到当前的分支中, 您以后必须使用 Git 合并 。

GIT Fetch 和 GIT Pull 之间的差异可以用以下情景来解释:(铭记图片比文字更响亮!

让我们举一个例子来说明您正在与团队成员一起开展一个项目。 因此,该项目将有一个主要分支, 所有贡献者都必须将该项目推到他们自己的本地仓库, 然后在这个本地分支上修改/ 添加模块, 然后推回主分支 。

因此,当您在本地存储库中将主要项目提前启动时, 两个分支的初始状态将像这样( A、 B和 C 是项目已经完成的模块) 。

现在,您已经开始开发新模块( 假设 D) , 当您完成 D 模块后, 您想要将其推进到主分支, 但与此同时, 您的队友之一开发了新的模块 E, F 和修改过的 C 。 因此, 现在发生的情况是, 您的本地仓库缺少项目初始进展的背后, 因此将您的更改推到主分支可能导致冲突, 并可能导致模块 D 出现故障 。

为了避免此类问题,并与项目的最初进展平行工作,有两种方式:

1. Git F抓取 - 这将下载对本地分支中不存在的源/ 主分支工程所做的全部更改。 并且将等待 Git 合并命令应用您仓库或分支的更改 。

现在您可以仔细监视文件, 然后将其合并到仓库。 如果需要修改 C, 您也可以修改 D 。

2. Git Pull - 这将更新您的本地分支, 使用源/ 主分支, 即它所做的是将 Git Fetch 和 Git 合并成一个组合, 但可能会引发冲突, 因此建议使用 Git Pull 并使用干净的复制件 。

更简短

git 获取获取更新, 但不会合并 。

git pull 会在引擎盖下抓一个小东西 然后合并

简简

git 抓取类似拉动, 但不合并 。 也就是说, 它会获取远程更新( 参考和对象) , 但您所在的本地保持相同( 即源/ 主机得到更新, 但主机保持相同 ) 。

Git拉拉从一个遥控器拉下来, 并立即合并。

更多

git 克隆克隆克隆 复制 。

git rebase 将不属于上游分支的当前分支保存为临时区域。 您的分支现在和您开始修改之前一样。 因此, git pull - rebase 将拉下远程修改, 倒带您的本地分支, 将您的变化一一重放到您当前分支的顶部, 直到您更新 。

并且,Git 分支 -a 将展示你所有分支的准确情况, 本地和远程。

这个博客文章很有用:

Git 拉拉、 Git 抓取和 Git 克隆( 和 Git 重新基底) - Mike Pearce 的区别

并覆盖 Git 拉, git 抓取, git 克隆和 Git 重新基底。

最新更新

我想我应该更新这个 来显示你是如何实际使用这个的。

从远程更新您的本地副本( 但不要合并 ) : git flick 在下载更新后, 让我们来看看差异: git diff 主源/ master 如果您对这些更新满意, 那么合并: git pull

注:

第2步:更多关于本地和远程之间的 diffs , 见: 如何比较本地 Git 分支与远程分支 。

第3步:也许更准确(例如快速变化的回邮)是在这里进行基底重置。见 @Justin Ohms在另一个答案中的评论。

另见:http://logair.net/blog/2009/04/16/git-fetch-and-merge/

注意: 我在拉动时提到过合并, 但是您可以配置拉动来使用重设 。

git 将代码从远程服务器拖动到您本地仓库的跟踪分支。 如果您的远程代码被命名为源代码( 默认) , 这些分支将位于源代码/ 内, 例如源代码/ 源代码/ 主管、 源代码/ mybranch-123 等 。 这些不是您当前的分支, 它们是服务器上这些分支的本地副本 。

git pull 进行 git 抓取, 但也同时将代码从跟踪分支合并到您当前本地版本的分支中。 如果您还没有准备好修改, 请先拨入 。