当前回答
好,这里有一些关于git pull
和git fetch
这样你就能理解 实际的差别 用几个简单的字来说获取获取最新数据, 但代码不会更改, 也不会干扰您当前的本地分支代码, 但是,拉拉拉获取代码更改并合并您的本地分支, 阅读以获得更多关于每个代码的细节 :
git 获取 git 获取
全部下载refs 参考和对象和任何新的分支 到您的本地仓库...
从一个或多个其他仓库获取分支和/或标签(统称“refs”),以及完成历史所需的物件。远程跟踪分支得到更新(关于控制这种行为的方法,见下文说明)。
默认情况下, 任何标记指向所获取历史的标记也会被获取; 效果是获取标记指向您感兴趣的分支。 此默认行为可以通过使用 -- tags 或 -- no-tags 选项或通过配置远程.... tagOpt 来更改。 通过使用重新检查, 明确获取标记, 您可以将标记指向您感兴趣的分支, 也可以获取标记指向您感兴趣的分支 。
git 抓取可同时从一个命名的仓库或 URL 或从多个仓库获取,如果给出了,并且有远程。 在配置文件中输入 。 (见 git- config)1).
当没有指定远程时, 默认会使用来源远程, 除非为当前分支配置了上游分支 。
所抓取的参考文献的名称,连同它们指向的对象名称,都写到.git/FETCH_HEAD。此信息可用于脚本或其他 git 命令, 如 git- pull 。
git 拉
它将应用来自偏远会 议 日 和 排当前分支当前分支当地...
包含从远程仓库到当前分支的更改。 在默认模式中, git 拉动是 Git 获取的速记, 之后是 git 合并 FETCH_HEAD 。
更精确地说, git pull 运行 Git 获取带有给定参数的 git 并调用 git 合并, 将回收的分支头合并到当前分支。 如果使用 -- rebase, 它会运行 git 重基而不是 git 合并 。
应该是传递到 Git-fasser 的远程仓库的名称1。可以指定任意的远程参考文献(例如,标签的名称),甚至可以指定具有相应的远程跟踪分支(例如,参考文献/标题/)的参考文献集。备注/备忘/发源/发源/发源/发件人:),但通常是远程存储库中的分支的名称。
以 git-branch -- track 设定的当前分支的“ 远程” 和“ 合并” 配置的默认值, 并从中读取 。
我还创造了视觉显示您如何在下面git fetch
和git pull
携手合作...
其他回答
回报 :
谈到上述答案中的拉动和取回,我想分享一个有趣的把戏,
git pull --rebase
以上命令是我生命中最有用的命令 挽救了很多时间
在将您的新承诺推进到服务器之前, 请尝试此命令, 它会自动同步最新的服务器更改( 加上一个抓取 + 合并) , 并将您的承诺放在 Git 日志的顶部 。 无需担心手动拉动/ 合并 。
简简单简的答案是:git pull
简单git fetch
和继 继 继 继 继 继git merge
.
必须指出,git pull
会不管你喜不喜欢自动合并。这当然可能导致合并冲突。让我们假设你的远程是origin
并且你的分支是master
。如果您git diff origin/master
在拉车之前,你应该对潜在的合并冲突有某种了解,并且可以据此为你的当地部门做好准备。
除了拉和推,一些工作流程涉及git rebase
,例如这一条,我从相关条款中转述如下:
git pull origin master
git checkout foo-branch
git rebase master
git push origin foo-branch
如果你发现自己处于这种情况, 你可能会被诱惑git pull --rebase
除非您真的知道自己在做什么 否则我建议不要这么做man
页面git-pull
版本, 版本2.3.5
:
这是一个潜在危险的操作模式。 它重写历史, 当您已经发布历史时, 历史并不是好兆头。 除非您仔细阅读了 git- rebase(1) , 否则不要使用此选项 。
更简短
git fetch
获取更新但不将其合并 。
git pull
是否为 a 的git fetch
兜帽下,然后一个merge
.
简简
git fetch
类似pull
但它不合并。 也就是说, 它会获取远程更新( NAME OF TRANSLATORS) 。refs
和objects
)但您的居住地保持不变(即:origin/master
得到更新,但master
保留原样) 。 。
git pull
从一个远程的并瞬间合并中拉下来。
更多
git clone
克隆回购 。
git rebase
将不属于上游分支的当前分支保存到临时区域。 您的分支现在和您开始更改前一样。 所以,git pull -rebase
将拉下远程修改, 倒转您的本地分支, 重放您的变化 在您当前分支的顶部 一个一个一个地重放 直到您更新。
还有git branch -a
将显示你们所有分支—— 本地和远程分支—— 究竟发生了什么。
这个博客文章很有用:
Git 拉拉、 Git 抓取和 Git 克隆( 和 Git 重新基底) - Mike Pearce 的区别
和涵盖范围git pull
, git fetch
, git clone
和git rebase
.
最新更新
我想我应该更新这个 来显示你是如何实际使用这个的。
从远程更新您的本地副本( 但不要合并) :
git fetch
下载更新后,
git diff master origin/master
如果你对最新消息满意的话, 合并一下:
git pull
注:
第2步:更多关于本地和远程之间差异的信息,见:如何比较本地 Git 分支与其远程分支的比较
第三步:也许更准确(例如,在快速变化的回购上)git rebase origin
此处。 见@ Justin Ohms 评论在另一个答案中。
另见:http://longair.net/blog/2009/04/16/git-fetch-and-merge/
注:我还提到merge
a 期间pull
然而,您仍然可以配置pull
使用rebase
取而代之。
和差异之间的差别GIT 抓取和GIT 调可用下列假设情况解释:(记住图片比文字更响亮!
让我们举一个例子来说明您正在与团队成员一起开展一个项目。 因此,该项目将有一个主要分支, 所有贡献者都必须将该项目推到他们自己的本地仓库, 然后在这个本地分支上修改/ 添加模块, 然后推回主分支 。
那么,初次初次国家当您在本地存储库中将主项目 提前启动时, 两支分支中的两支分支将变成这样( ) 。 ( ) @ info: whatsthisA
, B
和C
是项目已完成的模块)
现在,你已经开始研究新模块(假设)D
),当你们完成D
您想要将模块推到主分支中, 但是同时发生的情况是, 您的队友之一开发了新模块E
, F
修改和修改C
.
所以现在发生的事情是 您的本地存储库 缺乏项目最初进展的背后 从而推动您对主要分支的更改 可能导致冲突 并可能导致您的模块D
发生故障。
为了避免此类问题,并与项目的最初进展平行工作,有两种方式:
1. Git Fetch-(吉特接驳-)这将下载所有对本地分支中不存在的源/主分支工程所做的更改。 并将等待 Git 合并命令应用您仓库或分支的更改 。
现在您可以仔细监视文件, 然后将其合并到仓库。 您也可以修改D
因修改而需要时C
.
2. Git Pull-(吉特拉拉) - (吉特拉拉)这将更新您的本地分支, 使用源/ 主分支, 即它实际上所做的是 Git Fetch 和 Git 的组合 。但这可能引发冲突, 因此建议使用Git Pull,
简单说,如果你打算跳上飞机 没有任何互联网连接... 在离开之前,你可以做git fetch origin <branch>
。它会将所有更改带入您的计算机,但会将其与您的本地开发/工作空间区分开来。
在飞机上,您可以对本地工作空间进行修改,然后将其与您先前所获取的合并,然后解决潜在的合并冲突,而无需与互联网连接。除非有人做了新建新远程仓库的更改 :git push origin <branch>
去拿你的咖啡来
从这美妙的阿特拉斯教程:
缩略
git fetch
命令从远程仓库下载文件,从远程仓库下载到本地仓库。获取是您想看到每个人 所做的事其它它与 SVN 的更新相似, 它让您看到中央历史的进展, 但并不迫使您将修改合并到仓库。 Git从现有本地内容中获取的内容,它有绝对当地发展工作不受到任何影响。获取的内容必须使用
git checkout
命令。这使得获取安全的审查方式在将其与您本地的仓库整合之前能够兑现承诺。从远程仓库下载内容时,
git pull
和git fetch
用于完成任务的命令。您可以考虑git fetch
两个命令的“ 安全” 版本。 它会下载远程内容, 但不更新本地仓库的工作状态, 使您目前的工作保持完整 。git pull
是一个更积极的选项, 它会下载远程内容, 并立即执行 。git merge
以创建新远程内容的合并承诺。如果您在进展中出现变化,这将引发冲突和启动合并冲突解决流程。
与git pull
:
- 你没有得到任何孤立。
- 不需要明确检查 因为它暗含
git merge
. - 合并步骤将影响您的本地发展,中 中 中 中 中 中导致冲突起因的冲突
- 基本上不安全 这是侵略性的
- 相 异
git fetch
它只影响你.git/refs/remotes
Git拉力会影响你.git/refs/remotes
和.git/refs/heads/
嗯... 所以如果我不更新工作副本git fetch
,然后我在哪里做改变? Git在哪里获得新承诺的商店?
最首要的重要问题,heads
或remotes
不存储新的承诺,他们只是指针承诺承诺。git fetch
下载最新数据git 对象(blob, 树, 承诺。 要完全理解对象观察这个视频在 Git 内部),但只能更新您的remotes
指指该分支的最新任务。 它仍然与您的工作副本隔开, 因为您的分支的指针在heads
目录尚未更新。 它只会在merge
/pull
但还是在哪里?
在您的工程目录( 即您在哪里做git
执行命令( do) :
ls
。此选项将显示文件目录( T) 。 没有什么很酷的, 我知道 。现在做做
ls -a
。这将显示点点文件,即从.
这样您就可以看到一个名为 :.git
.do do do Do
cd .git
。这显然会改变你的目录。现在来有趣的部分; 做
ls
。您将会看到目录列表。我们正在寻找refs
。 do 做cd refs
.有趣的是,看看所有目录里面有什么, 但是让我们集中关注其中两个。
heads
和remotes
. 使用cd
检查他们内部。任何
git fetch
它将更新该页面中的指针。/.git/refs/remotes
目录。不会更新/.git/refs/heads
目录。任何
git pull
将首先完成git fetch
更新项目并更新/.git/refs/remotes
目录。然后它将会并且,还有与本地的本地合并,然后在/.git/refs/heads
目录。
还可以找到一个非常良好的相关答案:"Gitt gets" 的地方本身在哪里?.
另外,搜索“斜缩缩写”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)
如果你没有fetch
并且刚刚git checkout master
然后,你的地方小人物不会知道有2项承诺被添加。 它只会说:
Already on 'master'
Your branch is up to date with 'origin/master'.
但是,这是过时的,不正确的。因为Git会仅仅根据它所知道的,给你反馈。 新的承诺,它还没有撤销...
当地分行工作时,有没有办法看到在远距离进行的新变化?
有些国际开发实体(例如Xcode)超级聪明,使用git fetch
并且可以说明您当前工作分支的远程分支中已经更改的代码行行。 如果该行被本地更改和远程分支修改, 那么该行会用红色附加注释。 这不是合并冲突。 这是 a潜在潜力合并冲突 。 这是一个提示, 您可以在进行合并冲突前先用它解决未来合并冲突 。git pull
来自远程分支。
托盘提示 :
如果您已获取远程分支, 例如 :
git fetch origin feature/123
这将进入您的远程目录。 您的本地目录仍然无法访问它。 但是, 它简化了您在 DWIM 远程分支的校验( 做我的意思 ) :
git checkout feature/123
无需再做下列工作:
git checkout -b feature/123 origin/feature/123
将 " 更多 " 改为 " 更多 " 改为 " 更多 "在这里
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别