Git pull 和 Git fick 之间有什么区别?
当前回答
以下是Oliver Steele的画面,
调
其他回答
简单来说, 如果您要跳上没有互联网连接的飞机... 在您离开之前, 您可以只做 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 获取
您从源头通过获取下载到本地分支的更改 。 获取请求远程回购, 询问其他人所做的全部承诺, 但您没有在本地回购上。 获取这些承诺的下载, 并将其添加到本地仓库 。
基特合并
您可以通过合并命令获取下载的更改。 合并后将获取从获取中提取的承诺, 并尝试将其添加到您的本地分支。 合并后将保留您本地变化的承付历史, 这样当您以推力共享分支时, Git 将知道其他人如何将您的变化合并 。
吉特拉拉
抓取并合并一起运行的频率足够大, 足以创建一个将两者合并、 拉动、 合并的命令。 拉动时会抓取并合并, 以添加下载的字符串 。 @ info: whatsthis
git pull 尝试在获取承诺后自动合并 。 这是上下文敏感, 所以所有被拉过的承诺都将合并到您当前活动的分支中 。 git pull 自动合并承诺而不让您首先审查它们。 如果您不小心管理您的分支, 您可能会遇到经常的冲突 。 git 获取从目标分支中收集当前分支中不存在的任何承诺, 并将其存储在您的本地仓库中 。 但是, 它不会与当前分支合并 。 如果您需要更新您的仓库, 这特别有用 。 如果您需要更新文件, 但它正在处理一些可能中断的任务 。 要将承诺整合到当前的分支中, 您以后必须使用 Git 合并 。
Git pull 和 Git fick 之间有什么区别?
要理解这一点,你首先需要明白,你所在的本地数据库不仅维护着您的本地存储库,而且还维护着远程存储库的本地副本。
git 抓取时将您本地的远程仓库副本带来最新 。 例如, 如果您的远程仓库是 GitHub - 您可能想要将远程仓库中所做的任何更改 转到您的本地副本 远程仓库 。 这将允许您执行比较或合并等操作 。
Git pull 另一方面会将远程存储库的更改降低到您保存自己的代码的位置。 通常, git pull 将首先进行 Git pull 获取, 以更新远程存储库的本地副本, 然后将修改合并到您自己的代码存储库中, 并可能合并到您的工作副本中 。
git pull 命令其实是 Git 抓取的快捷键, 后面是 git 合并或 git 重设命令, 取决于您的配置 。 您可以配置您的 Git 仓库, 这样 git pull 是一个抓取, 后面是重置 。
推荐文章
- Windows git“警告:LF将被CRLF取代”,这是警告尾巴向后吗?
- git中的哈希冲突
- git可以自动在空格和制表符之间切换吗?
- Git暂存文件列表
- 如何将git配置存储为存储库的一部分?
- 如何修改GitHub拉请求?
- 如何在Github和本地删除最后n次提交?
- 我如何调试git/git-shell相关的问题?
- 错误:无法使用rebase进行拉取:您有未分阶段的更改
- Git隐藏未缓存:如何把所有未分期的变化?
- 真实的恶魔
- 如何从另一个分支获得更改
- Git:权限被拒绝(publickey)致命-无法从远程存储库读取。克隆Git存储库时
- git reflog和log有什么区别?
- git推挂在Total line之后