Git 获取上游后的 Git 日志

问题描述 投票:0回答:1

在干净的本地存储库上运行

git fetch upstream HEAD
后,我真的很想了解 git 的行为方式以及计划下发生的情况。

基本上步骤如下:

  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
,例如,就像什么都没发生一样。

非常欢迎任何解释:)

git fetch repository head git-fetch
1个回答
0
投票

什么是头 - 在 Git 中,任何分支都只是指向提交的指针。

Head
只不过是指向当前签出分支的指针。因此,当您(使用 checkout 命令)从一个分支跳到另一个分支时,您的
Head
指针会发生变化并开始指向已签出分支的最新提交,就是这样。这里是关于 Git 中分支如何工作的详细解释

获取和拉取的工作原理 - 其次,

$ git fetch fooBranch
只是将其他贡献者推送到
fooBranch
的所有最新提交从远程存储库获取到本地计算机。这些获取的更改安全地存储在本地计算机上的
.git/
目录中的某个位置,并且可以通过执行
git log upstream/fooBranch
git 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
时,您应该会看到默认分支的提交历史记录。

我希望这个解释符合您的要求。

© www.soinside.com 2019 - 2024. All rights reserved.