Git pull 和 Git fick 之间有什么区别?
当前回答
我想用视觉来描述这些事情。也许其他开发商也想看,所以我还要补充一下。我不完全确定这一切是否都正确,所以如果你发现任何错误,请评论。
LOCAL SYSTEM
. =====================================================
================= . ================= =================== =============
REMOTE REPOSITORY . REMOTE REPOSITORY LOCAL REPOSITORY WORKING COPY
(ORIGIN) . (CACHED)
for example, . mirror of the
a github repo. . remote repo
Can also be .
multiple repo's .
.
.
FETCH *------------------>*
Your local cache of the remote is updated with the origin (or multiple
external sources, that is git's distributed nature)
.
PULL *-------------------------------------------------------->*
changes are merged directly into your local copy. when conflicts occur,
you are asked for decisions.
.
COMMIT . *<---------------*
When coming from, for example, subversion, you might think that a commit
will update the origin. In git, a commit is only done to your local repo.
.
PUSH *<---------------------------------------*
Synchronizes your changes back into the origin.
拥有远程镜像的一些主要优点是:
性能(通过所有承诺和信息,而不试图通过网络挤压它) 有关您本地回购状态的反馈(例如,我使用阿特拉斯西安的源树树枝,这给了我一个灯泡,显示我是否比来源提前或落后。这个信息可以用GIT FETCH来更新 ) 。
其他回答
GIT Fetch 和 GIT Pull 之间的差异可以用以下情景来解释:(铭记图片比文字更响亮!
让我们举一个例子来说明您正在与团队成员一起开展一个项目。 因此,该项目将有一个主要分支, 所有贡献者都必须将该项目推到他们自己的本地仓库, 然后在这个本地分支上修改/ 添加模块, 然后推回主分支 。
因此,当您在本地存储库中将主要项目提前启动时, 两个分支的初始状态将像这样( A、 B和 C 是项目已经完成的模块) 。
调
现在,您已经开始开发新模块( 假设 D) , 当您完成 D 模块后, 您想要将其推进到主分支, 但与此同时, 您的队友之一开发了新的模块 E, F 和修改过的 C 。 因此, 现在发生的情况是, 您的本地仓库缺少项目初始进展的背后, 因此将您的更改推到主分支可能导致冲突, 并可能导致模块 D 出现故障 。
调
为了避免此类问题,并与项目的最初进展平行工作,有两种方式:
1. Git F抓取 - 这将下载对本地分支中不存在的源/ 主分支工程所做的全部更改。 并且将等待 Git 合并命令应用您仓库或分支的更改 。
调
现在您可以仔细监视文件, 然后将其合并到仓库。 如果需要修改 C, 您也可以修改 D 。
调
2. Git Pull - 这将更新您的本地分支, 使用源/ 主分支, 即它所做的是将 Git Fetch 和 Git 合并成一个组合, 但可能会引发冲突, 因此建议使用 Git Pull 并使用干净的复制件 。
调
git 将代码从远程服务器拖动到您本地仓库的跟踪分支。 如果您的远程代码被命名为源代码( 默认) , 这些分支将位于源代码/ 内, 例如源代码/ 源代码/ 主管、 源代码/ mybranch-123 等 。 这些不是您当前的分支, 它们是服务器上这些分支的本地副本 。
git pull 进行 git 抓取, 但也同时将代码从跟踪分支合并到您当前本地版本的分支中。 如果您还没有准备好修改, 请先拨入 。
我想用视觉来描述这些事情。也许其他开发商也想看,所以我还要补充一下。我不完全确定这一切是否都正确,所以如果你发现任何错误,请评论。
LOCAL SYSTEM
. =====================================================
================= . ================= =================== =============
REMOTE REPOSITORY . REMOTE REPOSITORY LOCAL REPOSITORY WORKING COPY
(ORIGIN) . (CACHED)
for example, . mirror of the
a github repo. . remote repo
Can also be .
multiple repo's .
.
.
FETCH *------------------>*
Your local cache of the remote is updated with the origin (or multiple
external sources, that is git's distributed nature)
.
PULL *-------------------------------------------------------->*
changes are merged directly into your local copy. when conflicts occur,
you are asked for decisions.
.
COMMIT . *<---------------*
When coming from, for example, subversion, you might think that a commit
will update the origin. In git, a commit is only done to your local repo.
.
PUSH *<---------------------------------------*
Synchronizes your changes back into the origin.
拥有远程镜像的一些主要优点是:
性能(通过所有承诺和信息,而不试图通过网络挤压它) 有关您本地回购状态的反馈(例如,我使用阿特拉斯西安的源树树枝,这给了我一个灯泡,显示我是否比来源提前或落后。这个信息可以用GIT FETCH来更新 ) 。
OK,这里有一些关于 Git pull 和 Git fick 的信息, 以便您能够理解实际差异... 几个简单的字, 获取最新数据, 但代码不会修改, 并且不会与您当前的本地分支代码发生混乱, 但是拉动代码修改, 并合并您的本地分支, 阅读以获得更多关于每个代码的细节 :
git 获取 git 获取
它会下载所有参考文献和对象 以及任何新的分支 到您的本地仓库...
从一个或多个其他仓库获取分支和(或)标记( 统称“ refs” ) , 以及完成历史所需的对象 。 远程跟踪分支会更新( 见下文关于控制此行为的方法的描述 ) 。 默认情况下, 任何指向所获取历史的标记也会被获取; 效果是从您感兴趣的分支获取标记。 这种默认行为可以通过使用 -- tags 或 -- no- tags 选项或配置远程来改变 。 tagOpt 。 通过使用直截取标记的重新检查, 您可以获取不指向您感兴趣的分支的标记 。 git 抓取标记可以一次从一个命名的仓库或 URL 中获取, 或从多个仓库中获取标记, 如果给定了, 并且有远程 。 配置文件中的条目。 (见 git- configg ) 。 当没有指定远程的遥控时, 除非为当前分支配置了上游分支。 正在获取的 ref 名称, 连同对象名称一起被您感兴趣的分支, 或脚本指令 可能被写入。
git 拉
它将应用本地从远程到当前分支的更改...
包含从远程仓库到当前分支的更改。 在默认模式下, git pull 是 Git 抓取的短手, 之后是 git 合并 FETCH_HEAD 。 更准确地说, git pull 以给定参数抓取 git 和调用 git 合并将回收的分支头合并到当前分支。 有了 -- rebase, 它会运行 git 重新基准而不是 git 合并 。 应该是被传送到 git- fetch1 的远程仓库的名称 。 它可以指定任意的远程 ref( 例如标签名称) , 或甚至收藏含有相应远程跟踪分支的refs/: heads/: refs/ remotes/genter/) , 但它通常是远程仓库中分支的名称 。 默认值, 由 git- branch 设定的当前分支的“ remote” 和“ merge” 配置, 从中读取 。
我还创建了下面的视觉图 来展示你们如何拼凑和拼凑在一起...
调
我也为此挣扎过。事实上,我来到这里时,用谷歌搜索了完全相同的问题。阅读了所有这些答案,终于在我脑海中画出了一张图片,我决定试着从下面看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添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别