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


当前回答

简单来说, 如果您要跳上没有互联网连接的飞机... 在您离开之前, 您可以只做 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 fetch

获取元数据。 如果您想要检查最近创建的分支, 您可能需要在退出前进行获取 。

git pull

从远程获取元元数据,并将文件从远程移动并合并到分支

Git使用两个命令从远程到本地获取最新版本的分支 :

git 获取 : Git 会从远程获取最新版本到本地版本, 但不会自动合并 。 git 获取来源母版 master git log -p master. 来源/ master git 合并来源/ master 。 上面的命令意味着从远程下载主分支的最新版本, 从原始到来源母分支。 然后比较本地主分支和源母母分支。 最后, 合并 。 git pull : Git 会从远程获取最新版本并合并到本地 。 git pull 源母版 。 上面的命令相当于 git 获取和 git 合并 。 在实践中, git 获取可能更安全一些, 因为合并前我们可以看到这些修改并决定是否合并 。

所有分支都储存在.git/refs中。

所有地方分支机构都储存在.git/refs/heads中。

所有远程分支都储存在.git/refs/remotes中。

git 获取命令下载承诺、 文件、 从远程仓库获取 refs 到您的本地 repo 。 获取是您想要看到其他人的工作内容时要做的事情 。

所以当您在 Git 获取所有文件、 承诺和 ref 时, 在

此目录. git/ refs/ remotes

您可以切换到这些分支以查看变化 。

另外,如果你愿意,你可以把它们合并起来。

git pull 只是下载这些修改, 并合并到当前分支 。

示例示例示例示例

如果您想要看到远程分支 Dev/jd/feature/auth 的工作, 您只需要做

git 获取源于 dev/jd/ feature/auth

看到变化或工作进展做,

git 检出 dev/jd/feature/auth

但如果您也想要获取它们并将其合并到当前分支,

git 拉力源dev/jd/feature/auth

如果您选择了 Git 获取源代码分支_ name, 它将会获取分支, 现在您可以切换到您想要的分支, 并查看这些变化。 您的本地主子或其他本地分支不会受到影响 。 但 Git pull 源代码分支_ name 将会获取分支, 并同时合并到当前分支 。

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

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

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

从远程分机复制新承诺副本到本地分机内的远程分机 。 (repo to repo operation) 主机@ remote {% text/ text/ text/ text/ progin/ master@ local 集成新承诺给本地分机( 内部分机操作) 远程/ text/ master@ local

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

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

在 Git 术语中, 第1 步是 Git 抓取, 第 2 步是 Git 合并或 Git 重新基准

git pull 是 Git 抓取和 Git 合并