Chr*_*row 2 git atlassian-sourcetree
我在 SourceTree 中看到下图。我已签出“dev”分支,但我不明白为什么我指向以蓝色突出显示的提交,而不是列表顶部的提交。
该图表明列表顶部的提交已在 dev 分支上提交(尽管我总是发现 SourceTree 图令人困惑,但我不确定这是否真的是图告诉我的)。如果我做:
git checkout dev
git reset --hard head
Run Code Online (Sandbox Code Playgroud)
那么我仍然处于以蓝色突出显示的同一个提交上。我也不清楚为什么主分支显示“origin/HEAD”标记。列表顶部的提交不应该被标记为“origin/HEAD”吗?这是怎么回事?我需要做些什么来解决这个问题吗?
这只是一个侧边栏,但有时很重要。有时,它不太重要或根本不重要,但值得了解:
\n\nHEAD全部大写,对 Git 具有特殊含义。这个也可以拼写@。
head,小写,没有特殊含义。
如果您使用的是不区分大小写的文件系统(例如,Windows 和 MacOS 默认),则全小写的名称头最终会与 Git 存储数据的文件相匹配@,其中 \xe2\x80\x94 用于主要工作 -无论如何,树被命名为\xe2\x80\x94 .git/HEAD。所以它最终可以在 Windows 和 MacOS 上运行。默认情况下,它在 Linux 上不起作用,并且在添加的工作树中也无法正常工作。1 始终使用@或HEAD拼写以确保它在所有情况下都适合您。
\n\n\n另外,我不清楚为什么主分支显示“origin/HEAD”标记。列表顶部的提交不应该被标记为“origin/HEAD”吗?这里发生了什么 ...?
\n
根据Code-Apprentice 所说的进行构建:您自己的 Git 将其在其他 Git 上看到的分支名称复制到您自己的 Git 存储库中origin。它为这些复制的名称添加前缀,origin/以便您可以将它们与您的名称区分开。这就是为什么你最终会得到一个origin/master、origin/dev等等:他们的 Git 有一个master、dev等等。
就像你自己的存储库一样,它有一个特殊的名称HEAD来记住你签出的分支名称,他们的 Git 也有一个当前的分支名称。在早期的某个时刻,您运行(或此命令的某些 GUI 等效项)来创建Git 存储库。你的 Git 调用了他们的 Git,不仅得到了他们的分支名称列表,还得到了他们/当前分支信息的内容。\xe2\x80\x94(在本例中为\xe2\x80\x94)选择了Git 在新克隆中创建的分支,基于您基于 .git 创建的分支。(哇!)git clone url@HEADmasterorigin/mastermaster
当你的 Git 完成了读取他们的HEAD(并查看master)以便读取他们的master(你的origin/master)从而创建你的的所有过程之后master,你的 Git 在你自己的存储库中创建了一个符号引用,以提醒你它们包含了你的HEAD名字。master正在打电话origin/master。该提醒几乎永远保留在您的存储库中。这不是很有用。事实上,它似乎完全没用\xe2\x80\x94\我自己从来没有发现它有任何用处。但它就在那里!
1在那些可以工作的系统上,会发生的情况是head,小写的 与(大写)文件匹配,因此您得到主.git/HEAD工作树在 / 中使用的提交,而不是在/ 当前添加的工作树。