为什么‘git’能赚钱。原产地/船长:船长`休假阶段性变更?
我想知道为什么下面的叶子会有变化:为什么‘git’能赚钱。原产地/船长:船长`休假阶段性变更?,git,git-fetch,Git,Git Fetch,我想知道为什么下面的叶子会有变化: git reset——硬主控~4#在下一个命令的位置重置 #从该存储库获取。。。src:起点/终点:终点 git fetch——更新头ok。原产地/船长:船长 git status#->显示各种暂存文件? 分支master似乎与origin/master同步。 但是:现在我在master上有各种暂存文件?。 为什么会有这样的行为?我以为是git fetch。origin/master:master将我的本地分支机构负责人更新为origin/master中的负
git reset——硬主控~4#在下一个命令的位置重置
#从该存储库获取。。。src:起点/终点:终点
git fetch——更新头ok。原产地/船长:船长
git status#->显示各种暂存文件?
分支master
似乎与origin/master
同步。
但是:现在我在master
上有各种暂存文件?。
为什么会有这样的行为?我以为是git fetch。origin/master:master将我的本地分支机构负责人更新为origin/master
中的负责人。显然,它做得更多?但具体是什么?手册页提到:
默认情况下,git fetch
拒绝更新与当前分支对应的头
此标志将禁用检查。这纯粹是为了git pull与git fetch通信的内部使用,除非您实现自己的瓷器,否则不应该使用它 因此:
- 您已将索引重置为
master~4
- 然后,您将
重置为master
(这不是origin/master
,而是其他提交)master~4
origin/master
)
如果您的目标是将主机重置为原点/主机,请执行以下操作:
git fetch
git switch -C master origin/master
为了正确理解为什么这会导致文件“为提交而暂存”,您需要理解并记住Git的以下十个方面:
git log
就是这样工作的:我们使用分支名称查找最后一次提交。分支名称的哈希ID导致名称“指向”提交。提交父项的哈希ID使提交向后指向其父项。它的父级也有一个哈希ID,它指向后面的另一个步骤,依此类推
HEAD
。这通常“附加到”分支名称。如果在没有分支名称或其他起点的情况下运行git log
,git将使用HEAD
查找当前分支,然后使用分支名称查找最后一次提交
Git添加了它,那么第三个“副本”实际上只是共享提交的副本。(提交本身也共享这些消除重复的“副本”,这是非常安全的,因为它们都是严格只读的。)
git fetch
现在做了什么(以及为什么需要--updatehead ok
标志)。特别是如果你是一名视觉学习者,画一些Git提交工作原理的图表也可能会有所帮助,所以我们将从这开始
一连串的犯罪
首先,我们有一系列的提交,每个提交都有自己丑陋的哈希ID。我们不想处理真正的哈希ID,所以我们将使用一个大写字母代替哈希ID。这个链中的最后一个提交有一些散列ID,我们称之为H
。我们使用分支名称查找此名称,并将特殊名称HEAD
附加到分支名称:
<-H <--branch (HEAD)
I <-- br1 (HEAD)
/
...--G--H <-- main
当然,commitG
指向更早的提交:
... <-F <-G <-H <--branch (HEAD)
当前提交仍然是commitH
,我们将HEAD
移动到新名称br1
。然后我们做一个新的提交,我们称之为I
I
将指向H
,因为我们使用commitH
作为当前提交进行了新的提交I
。因此,Git将I
的哈希ID写入名称br1
,并将HEAD
附加到该名称中:
<-H <--branch (HEAD)
I <-- br1 (HEAD)
/
...--G--H <-- main
从这里,我们创建另一个分支名称,如br2
,将HEAD
附加到它(这次继续提交H
),并进行新的提交,以进入最终设置
索引/暂存区域/缓存
请注意,每个文件的第三个副本将如何匹配我们签出的任何提交。这是因为当我们移动电流时,Git小心地协调它
I <-- br1 (HEAD)
/
...--G--H <-- main
I--J <-- br1
/
...--G--H <-- main (HEAD)