如何解决使用来源:目标位置与Git拉取进行Git提取
从所有关于访存和提取之间差异的问题中,答案是访存将更新您的远程副本,而不会将任何内容合并到本地分支中。但是,如果将fetch命令与source:destination一起使用,请说“ git fetch origin development:development”,它将同时更新远程副本和本地副本。那么在这种情况下,pull和fetch有什么区别?
解决方法
但是,如果将fetch命令与source:destination一起使用,请说“ git fetch origin development:development”,它将同时更新远程副本和本地副本。
这不是真的。
在1.8.4之前的Git版本中发生了一个例外(我们可能会折扣),其中git fetch origin development:development
完全无法完全更新refs/remotes/origin/development
。但是,git fetch origin development
也在此处无法更新refs/remotes/origin/development
。这就是为什么我建议打折旧版本的Git:它们在获取和合并方面的行为仍然相同。 (嗯,那真的很老。)
但是,更重要的例外是,无法进行git merge
或通过merge.ff
禁止进行快进操作(如“ pull.ff
”所称的“快进合并”)和/或git pull
配置变量或命令行选项。进入快进与实际合并之间的区别。
当您git merge
运行提取并合并时,第二个Git命令等于或等效于运行实际的HEAD
命令。该命令将:
- 在
HEAD
和合并目标之间找到合并基础提交; - 然后,考虑合并是否可能和/或是否可以进行快进操作。
在以下情况下可以并允许快进:
- 合并基础为
HEAD
; - 还有另一个提交要合并,
git merge
是该提交的祖先;和 - 命令行和配置均禁止转发。
在这种情况下(即快进可能的情况),即git fetch origin development:development
会进行快进而不是合并,在这种情况下,development
也会快进本地分支名称git merge
。
但是,如果可以合并,但是禁止或不可能进行快速转发,则git fetch origin development:development
会进行真正的合并,而development
只会简单地将名称{{1 }}。因此,这两个命令是不同的。当然,如果您希望拉动始终快进,并且例如将pull.ff
配置为only
,我们将返回相同的操作。
嗯,差不多。仍然存在另一个差异:git pull
的{{1}}将快速转发当前分支(仅),但是如果git merge
失败,git fetch origin development:development
将失败是当前分支。因此,您必须位于其他分支。有一种方法可以使development
快进当前分支(提供git fetch
标志),但是如果这样做,则必须格外小心,因为更新的分支名称不会影响索引并正常工作-tree,不同于--update-head-ok
驱动的快进操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。