Git Fetch Upstream后的git log行为

Git Fetch Upstream后的git log行为

问题描述

我真的很想了解Git的行为和在我在干净的本地仓库上运行 git fetch upstream HEAD后发生了什么。

基本的步骤如下:

  1. 在远程仓库(本例中是GitHub)中创建一个分支
  2. 在本地克隆我的分支: git clone <URL>
  3. 设置上游: git remote add <upstream-URL>
  4. 获取上游数据: git fetch upstream HEAD
  • 注意:我希望使用这个命令只跟踪本地仓库中的默认分支,而不是简单地用git fetch upstream

之后,我确实看到有数据消息被获取,然而,在git log --all中,我看不到upstream/HEAD,好像什么都没发生一样。

解决方案

什么是Head – 在Git中,任何分支只是一个指向提交的指针。Head只是一个指向当前已检出分支的指针。所以当你(通过checkout命令)从一个分支切换到另一个分支时,你的Head指针会改变,并开始指向已检出分支的最新提交。这就是Git中分支工作原理的详细解释。

fetch和pull的工作原理 – 其次,$ git fetch fooBranch只是从远程仓库到你的本地机器上获取其他贡献者推送到fooBranch的最新提交。这些已获取的更改会被安全地存储在.git/目录的某个地方,可以通过执行git log upstream/fooBranchgit log upstream/Head来访问。尽管此时这些更改在本地文件/工作区中是不可见的,你可能会对以下命令的输出看到不同的结果。

$ git log upstream/fooBranch

VS

$ git log fooBranch

这显示了Git存储了2份分支的副本,一个用于跟踪远程库中的变更,另一个用于本地库。当您进行提交时,它们将作为本地分支副本的一部分存储,并在推送时将其推送到远程库,最终由其他贡献者获取并与他们自己的fooBranch的远程副本同步。

回到之前的地方,现在要将获取的变更与本地库/工作区同步,您需要运行$ git merge upstream/fooBranch。现在,本地库和远程的fooBranch副本将在您的本地库中同步,您将看到上述2个命令的相同输出。

按照类似的方式,$ git pull upstream fooBranch基本上是以下命令的组合-

$ git fetch upstream fooBranch + $ git merge upstream/fooBranch

所以这是你拉取(fetch)和拉(pull)的情况下发生的事情,当你运行 $ git log --all 你将看到你默认分支的提交历史。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程