git push 用法
工作原理
git pull
命令首先运行 git fetch
,它会从指定的远程存储库下载内容。然后执行 git merge
,将远程内容引用和头合并到一个新的本地合并提交中。为了更好地演示拉取和合并流程,让我们考虑以下示例。假设我们有一个包含主分支和远程来源的存储库。
在这种情况下,git pull
将从本地和主分支分歧的点下载所有变更。在这个例子中,这点是 E。git pull
会获取分歧的远程提交,它们是 A-B-C。然后,拉取流程将创建一个新的本地合并提交,其中包含新的分歧远程提交的内容。
相关资料
高级 Git 日志
查看解决方案
了解 Bitbucket Cloud 的 Git
在上图中,我们可以看到新提交 H。此提交是一个新的合并提交,包含远程 A-B-C 提交的内容以及一条合并的日志消息。这个例子是为数不多的 git pull
合并策略之一。可以将 --rebase
选项传递给 git pull
,以使用变基合并策略而不是合并提交。下个示例将演示变基拉取是如何工作的。假设我们正处于第一张图的起点,并且我们已经执行了 git pull --rebase
。
在这张图中,我们现在可以看到 rebase pull 不会创建新的 H 提交。相反,rebase 复制了远程提交 A--B--C 并重写了本地提交 E--F--G,使其出现在本地原始/主提交历史记录中。
常用选项
git pull <remote>
获取当前分支的指定远程副本,并立即将其合并到本地副本中。这与后面是 git merge origin/<current-branch>
的 git fetch <remote>
一样。
git pull --no-commit <remote>
与默认调用类似,获取远程内容但不创建新的合并提交。
git pull --rebase <remote>
与之前的拉取相同,不要使用 git merge
将远程分支与本地分支集成在一起,而是使用 git rebase
。
git pull --verbose
在拉取过程中提供详细输出,显示正在下载的内容和合并的详细信息。
Git 拉取讨论
您可以把 git pull
看作是 Git 的 svn update
版本。这是将本地存储库与上游变更同步的简便方法。下图解释了拉取流程的每个步骤。
您一开始以为您的存储库是同步的,但随后 git fetch
发现 origin 的 main 版本自您上次检查以来已经有了进步。然后 git merge
立即将远程主服务器集成到本地主服务器中。
Git 拉取和同步
git pull
是声称负责‘同步’远程内容的众多命令之一。git remote
命令用于指定同步命令将在哪些远程端点上运行。git push
命令用于将内容上川到远程存储库。
git fetch
命令可能与 git pull
混淆。它们都用于下载远程内容。可以在 git pull
和 git fetch
之间进行重要的安全区分。git fetch
可以被认为是"安全的"选择,而 git pull
被认为是不安全的。git fetch
将下载远程内容而不更改本地存储库的状态。或者,git pull
会下载远程内容并立即尝试变更本地状态以匹配该内容。这可能会无意中导致本地存储库进入冲突状态。
通过变基拉取
--rebase
选项可用于通过阻止不必要的合并提交来确保线性历史记录。许多开发人员更喜欢变基而不是合并,因为使用它就像是“我要把我的变更放在其他所有人的工作成果之上”。从这个角度讲,使用带有 --rebase
标记的 git pull
更像是 svn update
,而不是简单的 git pull
。
实际上,使用 --rebase
拉取是一个非常常见的工作流程,因此有一个专门的配置选项:
git config --global branch.autosetuprebase always
运行该命令后,所有 git pull
命令都将通过 git rebase
而不是 git merge
进行集成。
Git 拉取示例
以下示例演示了如何在常见场景中使用 git pull
:
默认行为
git pull
执行 git pull
的默认调用等同于 git fetch origin HEAD
和 git merge HEAD
,其中 HEAD
是指向当前分支的引用。
远程存储库上的 Git 拉取
git checkout new_feature
git pull <remote repo>
此示例首先执行签出操作并切换到 git pull
。这将暗中从 git merge
。
Git 拉取变基而不是合并
以下示例演示了如何使用变基与中央存储库的主分支同步:
git checkout main
git pull --rebase origin
这只会将您的本地变更置于其他人已经贡献的内容之上。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。