Git pull 和 Git fick 之间有什么区别?
当前回答
Git pull 和 Git fick 之间唯一的区别是:
git 拉从远程分支拉拉并合并。
git 只从远程分支获取从远程分支获取的抓取, 但不会合并
i. e. git pull = git 获取 + git 合并...
其他回答
使用 git 抓取的一个实例是, 以下会告诉您自上次拉动以来远程分支的任何变化... 这样您就可以在实际拉动之前检查, 这样就可以改变您当前分支和工作副本中的文件 。
git fetch
git diff ...origin
见 git diff 关于双点... 和三点... 语法的文件。
调
这种交互式图形表达方式非常有助于低估数据:http://ndpsoftware.com/git-cheatesheet.html。
git 获取从远程到本地仓库的更改时只“ 下載 ” 。 git 下载这些更改并将其合并到当前的分支中。 “ 在默认模式中, git 拖动是 Git 获取的简称, 然后是 Git 合并 FETCH_HEAD 。 ”
git pull = git fetch + git merge
简单来说, 如果您要跳上没有互联网连接的飞机... 在您离开之前, 您可以只做 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 checkout master
git fetch
git diff origin/master
git rebase origin master