Git fetch 与 git pull

git fetch 和 git pull 都用于从远程存储库下载内容。
git fetch 命令不会强制将更改合并到存储库中,它只是显示中央历史记录的进展。
获取的内容对本地工作没有任何影响,应该使用 git checkout 命令将其检出,以便在将提交合并到本地存储库之前对其进行安全审查。
git pull 命令不仅会下载新内容,还会直接将其集成到当前工作副本中。
这可能会导致合并冲突。
此外,建议仅在工作副本干净时运行 git pull。

定义

git fetch 命令用于将提交、文件和引用从远程存储库下载到本地存储库。
它用于查看团队的其他成员一直在做什么。

常见选项

--all获取所有远程分支机构。
--dry-run显示该命令的演示运行而不进行更改。
-k or --keep保持下载的包装。
-p or --prune删除在获取之前在遥控器上不存在的遥控跟踪引用。
--depth=<depth>限制从每个远程分支历史记录的提示获取的提交数量。

它如何与远程分支一起工作

Git 存储本地和远程提交,并通过使用分支引用进行分离。
本地分支的引用存储在 /.git/refs/heads/中。
要查看本地分支引用列表,请运行 git branch 命令。

git branch
#master
#crossword
#solver

探索 /.git/refs/heads/目录的内容将有以下输出:

ls ./.git/refs/heads/
#master
#crossword
#solver

远程分支引用存储在 ./.git/refs/remotes/目录中。
要查看远程分支,请在 git 分支中使用 -r 标志。
这是获取远程存储库后的输出:

git branch -r
# oroirn/master
# oroirn/crossword
# oroirn/solver
# remote-repo/master
# remote-repo/other-feature

输出显示前缀 oroirn/显示远程分支。
我们可以使用 git checkout 和 git log 命令检查远程分支。

在批准远程分支的更改后,我们可以使用 git merge 命令将其合并到本地分支。

改用 git pull 命令来缩短这个过程。

使用 git fetch 同步原点

以下示例显示了如何将本地存储库与中央存储库的 master 分支同步:

git fetch oroirn

输出将显示已下载的分支:

b341bc3..32a45b1 master -> oroirn/master
b341bc3..7a52a22 develop -> oroirn/develop
* [new branch] some-feature -> oroirn/some-feature

使用 oroirn/master 作为过滤器调用 git log 以显示添加到上游 master 的提交:

git log --oneline master..oroirn/master

检查更改并将它们合并到本地 master 分支:

git checkout master
git log oroirn/master

运行 git merge oroirn/master 以与上游开发同步:

git merge oroirn/master

如何 git fetch 远程分支

其中我们将展示获取远程分支并将本地工作状态更新为远程内容的步骤。
在以下示例中,我们有一个中央存储库源,本地存储库已使用 git clone 命令从中克隆。

还有另一个名为 test_repo 的远程存储库,其中包含必须配置和获取的 feature_branch。

第一步是使用 git remote 配置远程存储库:

git remote test_repo git@hostname:test/test_repo.git

使用同事存储库的 URL,我们创建了对它的引用。
要下载内容 git fetch 测试 feature_branch:

git fetch test feature_branch
fetching test/feature_branch

这会将 test/feature_branch 的内容集成到本地存储库。
现在,使用 git checkout 命令来检出下载的远程分支:

git checkout test/feature_branch
Note: checking out test/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can drop all the commits you make in this
state without influencing branches by executing another checkout.
If you want to generate a new branch for maintaining commits you create, you may
do so (now or later) if you use -b with the checkout command again. Example:
git checkout -b <new-branch-name>

输出显示我们处于分离的 HEAD 状态,这意味着 HEAD 引用指向一个与本地历史不按顺序的引用。

使用 git checkout 命令可以从 test/feature_branch 引用创建一个新的本地分支:

git checkout -b local_feature_branch

创建新的本地分支,更新 HEAD 以指向最新的远程内容。

git fetch
日期:2020-06-02 22:16:33 来源:oir作者:oir