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


当前回答

人们必须牢记 git 的性质。 您有远程和本地分支( 不一定相同 ) 。 与其他源控制系统相比, 这可能会有点令人困惑 。

通常当您检出远程时,会创建本地副本,跟踪远程。

gitreach 将会与远程分支合作并更新您的信息 。

实际上,如果其他SWES同一个部门工作,就属于这种情况,而小型项目----一个部门----一个项目设想方案的情况很少。

您对本地分支的工作仍然完好无损 。 为了将更改带回您的本地分支, 您必须合并/ 重订远程分支的更改 。

git拉动正好就是这两个步骤(即 -- -- rebase to rebase rebase 而不是合并)

如果您的本地历史和远程历史有冲突, 您将被迫在一小块按键发布您的更改时进行合并 。

因此,这真正取决于你的工作环境的性质和使用经验。

其他回答

git pull 命令其实是 Git 抓取的快捷键, 后面是 git 合并或 git 重设命令, 取决于您的配置 。 您可以配置您的 Git 仓库, 这样 git pull 是一个抓取, 后面是重置 。

我也为此挣扎过。事实上,我来到这里时,用谷歌搜索了完全相同的问题。阅读了所有这些答案,终于在我脑海中画出了一张图片,我决定试着从下面看2个储存库和1个沙箱的状况,以及一段时间以来在看它们的版本时所采取的行动。这就是我所想出来的。如果我在任何地方搞砸了,请纠正我。

三个邮箱有一个接听器:

---------------------     -----------------------     -----------------------
- Remote Repo       -     - Remote Repo         -     - Remote Repo         -
-                   -     - gets pushed         -     -                     -
- @ R01             -     - @ R02               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Repo        -     - Local Repo          -     - Local Repo          -
- pull              -     -                     -     - fetch               -
- @ R01             -     - @ R01               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
- Checkout          -     - new work done       -     -                     -
- @ R01             -     - @ R01+              -     - @R01+               -
---------------------     -----------------------     -----------------------

三号邮局拉一拉一拉

---------------------     -----------------------     -----------------------
- Remote Repo       -     - Remote Repo         -     - Remote Repo         -
-                   -     - gets pushed         -     -                     -
- @ R01             -     - @ R02               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Repo        -     - Local Repo          -     - Local Repo          -
- pull              -     -                     -     - pull                -
- @ R01             -     - @ R01               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
- Checkout          -     - new work done       -     - merged with R02     -
- @ R01             -     - @ R01+              -     - @R02+               -
---------------------     -----------------------     -----------------------

这帮助我理解了为什么买东西很重要。

简单来说, 如果您要跳上没有互联网连接的飞机... 在您离开之前, 您可以只做 Git 获取来源 < branch> 。 它会将所有更改带入您的计算机, 但它会与您的本地开发/ 工作空间分开 。

在飞机上,您可以对本地工作空间进行修改,然后将其与您先前获取的内容合并,然后解决潜在的合并冲突,而无需与互联网连接。除非有人对远程存储库做了新的修改,否则一旦你到达目的地,您就会使用 Git 推车源头<branch> 并去喝咖啡。


从这个很棒的阿特拉斯家的教程:

git 抓取命令下载承诺、 文件和 ref 命令, 从远程仓库获取内容, 绝对不会影响您的本地开发工作 。 获取内容必须使用 Git 检查命令来明确检查 。 这样, 在将内容与本地仓库整合之前, 可以获取一个安全的审查方式。 它与 SVN 更新相似, 因为它让您看到中央历史是如何进展的, 但并不迫使您实际将更改合并到您的仓库 。 Git 将远程内容从现有本地内容中分离出来, 它绝对不会影响您的本地开发工作 。 获取的内容必须使用 Git 检查退出命令来明确检查 。 这样可以让您在将内容与本地仓库整合之前获取一个安全的方式来审查 。 在从远程仓库下载内容时, 您可以使用 Git pull 和 git 抓取命令来完成任务 。 您可以考虑 git 获取两个命令的“ 安全” 版本 。 它会下载远程内容, 但不会更新您的本地仓库的工作状态, 使您当前的工作保持完整 。 git pull is the more in the more ketional option, option option option, 它会为活跃本地分支下载远程内容, 并会立即执行合并为新的远程冲突。


Git pull :

您没有被孤立。 它不需要被明确检查 。 因为它暗含地会合并 。 合并步骤会影响您的本地发展, 并可能导致冲突 。 它基本上不安全 。 它具有攻击性 。 不像 git 获取只影响您的. git/ refs/ remotes, git 拉动会影响您的. git/ refs/ remotes/ remotes/ 和. git/ refs/ heads/ 。


嗯... 所以,如果我不更新工作副本 使用 git 抓取, 那么我在哪里做改变? Git 在哪里去存储新的承诺 ?

问得好。 首先, 头或遥控器不会存储新承诺 。 它们只是有要承诺的指针 。 因此, 通过 git 将您下载最新的 git 对象( blob, 树, 承诺 ) ( blob, 树, 承诺 ) 。 要完全理解对象, 请在 Git 内部 观看此视频, 只需更新您的遥控器, 指向该分支的最新承诺 。 它仍然与您的工作副本隔开, 因为您的分支在头目录中的指针没有更新 。 它只会在合并/ 挂载时更新 。 但是再次在哪里? 我们来看看在哪里 。

在您的工程目录( 即您如何执行 git 命令) 中 :

将显示文件与目录。 不酷, 我知道。 现在是 - a 。 这将显示点文件, 即以文件开头的文件 。 这样您就可以看到一个名为 . git. do. cd. git 的目录 。 这显然会改变您的目录 。 现在将出现有趣的部分 ; do is 。 您将会看到一个目录列表 。 我们查找的是 refs 。 做 cd refs 。 查看所有目录中的内容很有趣, 但是让我们关注其中的两个。 头和远程 。 也使用 cd 来检查它们内部 。 任何 git 抓取将会更新 /. git/ refs/remotes 目录中的点 。 它不会更新 /. git/ refs/head 目录中的任何内容 。 任何 git pull 将首先对 /. git/ refs/ remotes 目录中的项目进行抓取和更新 。 然后它还将与您的本地目录合并, 并修改 /. git/ grefhead/head/head/head/ heheads/ halls/ heads/ atots/.


也可以在“ 提供” 地点本身的什么地方找到非常良好的相关答案 ?

另外, 寻找 Git 分支点名会的“ 斜线符号 ” 。 它有助于您更好地了解 Git 如何将事物放入不同的目录 。


查看实际差异

仅仅做:

git fetch origin master
git checkout master

如果远程主机更新了, 你会收到这样的讯息:

Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

如果你没有去取,只是做了git退房硕士... ...那么你的地方git就不会知道有2个承诺了。 它只会说:

Already on 'master'
Your branch is up to date with 'origin/master'.

但是,这是过时的,不正确的。因为Git会仅仅根据它所知道的,给你反馈。 新的承诺,它还没有撤销...


当地分行工作时,有没有办法看到在远距离进行的新变化?

有些 IDE (例如 Xcode) 超级智能, 使用 git 抓取的结果, 并可以说明您当前工作分支的远程分支已经更改的代码行。 如果该行被本地更改和远程分支所更改, 那么该行会用红色附加注释。 这不是合并冲突。 这是一个潜在的合并冲突 。 您可以在从远程分支切换前先提前解决未来的合并冲突 。


托盘提示 :

如果您已获取远程分支, 例如 :

git fetch origin feature/123

这将进入您的远程目录。 您的本地目录仍然无法访问它。 但是, 它简化了您在 DWIM 远程分支的校验( 做我的意思 ) :

git checkout feature/123

无需再做下列工作:

git checkout -b feature/123 origin/feature/123

将“更多”改为“此处”

初学者的简单图形化代表,

在这里,

git pull  

将会从仓库获取代码 并重新基础与您的本地... 在git拉动中,有 可能性创造新的承诺。

但是在,

git 获取 git 获取

将会从存储库获取代码, 我们需要使用 Git 重新基准来手动重标

eg: 我要从服务器主机取回它, 并在本地主机重标 。

1) git pull( 重基将自动完成) :

git pull origin master

这里的起源是您的远程回购主人 您的分支是您的远程回购主人

2) git 获取( 需要手动重标) :

git fetch origin master

它会从源代码中获取服务器更改。 它会位于本地, 直到您自己重新定位它。 我们需要通过检查代码手动来修正冲突 。

git rebase origin/master

这将会将代码重设为本地代码。 在确保您在正确的分支之前。

Git pull 和 Git fick 之间唯一的区别是:

git 拉从远程分支拉拉并合并。

git 只从远程分支获取从远程分支获取的抓取, 但不会合并

i. e. git pull = git 获取 + git 合并...