为什么我的 git 分支没有指向最新的提交?
Why is my git branch not pointing to the latest commit?
我在 SourceTree 中看到了下图。我检查了 'dev' 分支,但我不明白为什么我要指向以蓝色突出显示的提交,而不是列表顶部的提交。
该图表明列表顶部的提交已在 dev 分支上提交(尽管我总是觉得 SourceTree 图令人困惑,但我不确定这是否真的是该图告诉我的) .如果我这样做:
git checkout dev
git reset --hard head
然后我仍然在以蓝色突出显示的同一个提交上。我也不清楚为什么 master 分支显示 'origin/HEAD' 的标记。列表顶部的提交不应该标记为'origin/HEAD'。这是怎么回事,我需要做些什么来解决这个问题吗?
该图仅显示未与当前分支合并的其他分支中的旧提交。对我来说不那么混乱检查 sourcetree 中的选择器 current branch
。
当您重置分支时,您可能没有 origin/dev
的最新版本,或者您看到的其他分支不一致。
尝试:
git stash # if needed
git checkout dev
git fetch origin dev
git reset --hard origin/dev # or git reset --hard HEAD
git stash pop # if needed
这里是 current branch
选择器所在的位置。这不会改变任何东西,只是可视化:
注意:您可以使用 git fetch --all
,但我通常不用,我不需要所有更新,只需要更新我正在处理的分支。
The graph suggests that the commit at the top of the list has been commited on the dev branch
这是对图表的错误解读。 dev
分支包含带有消息 "Merged in FD-50-Reboot-scheduler" 的提交及其下方的连接。它不包含上述任何提交。
顶部提交位于名为 origin/Demo-fake-data
的分支上。
Also I'm unclear on why the master branch is showing a marker of 'origin/HEAD'. Shouldn't the commit at the top of the list be marked 'origin/HEAD'. What's going on here, and is there something I need to do to fix this?
HEAD
是当前检出提交的特殊名称。 origin/HEAD
是在名为 origin
的远程服务器上签出的提交。这里没有什么可以解决的。如果你在一个团队中工作,你根本不应该弄乱远程仓库,除非你被分配了那个责任。
这都是一个侧边栏,但有时它很重要。有时,它不太重要或根本不重要,但值得了解:
HEAD
,全部大写,对Git有特殊意义。这也可以拼写为 @
.
head
,小写,没有特殊含义。
如果您使用的是不区分大小写的文件系统(例如,Windows 和 MacOS 默认设置),全小写的名称 head 最终会与 Git 存储 @
中的数据,无论如何,对于主要工作树,它被命名为 .git/HEAD
。所以它在 Windows 和 MacOS 上结束了某种工作。默认情况下,它在 Linux 上不起作用,并且在添加的工作树中无法正常工作。1 始终使用 @
或 HEAD
拼写以确保它在所有情况下都适用。
Also I'm unclear on why the master branch is showing a marker of 'origin/HEAD'. Shouldn't the commit at the top of the list be marked 'origin/HEAD'. What's going on here ...?
在 的基础上构建一点:您自己的 Git 副本,到您自己的 Git 存储库中,b运行ch 名称在另一个存储库中看到Git 在 origin
结束。它在这些复制的名称前加上 origin/
前缀,以便您可以将它们与 您的 名称区分开来。这就是为什么你最终得到 origin/master
、origin/dev
等等:他们的 Git 有 master
、dev
等等。
就像您自己的存储库一样,它有一个特殊的名称 HEAD
以记住您检出的 b运行ch 名称,它们的 Git 有一个当前的 b运行ch 名称。在早期的某个时候,你 运行 git clone <em>url</em>
命令) 创建 您的 Git 存储库。你的 Git 调用了他们的 Git 并且不仅得到了他们的 b运行ch 名称列表,还得到了他们的 @
/ HEAD
current-b 的内容运行通道信息。在本例中是 master
——根据 origin/master
你的 Git 基于他们的 master
创建。 (哇!)
在你的 Git 完成所有阅读他们的 HEAD
(并看到 master
)的过程之后,以便阅读他们的 master
(你的 origin/master
) 为了创建您的 master
,您的 Git 在您自己的存储库中创建了一个 符号引用 以提醒您他们的 HEAD
包含他们的名称 master
您正在呼叫 origin/master
。该提醒几乎永远保留在您的存储库中。这不是很有用。事实上,它似乎完全没用——我自己从未发现它有任何用处。但它就在那里!
1在它可以正常工作的那些系统上,发生的是 head
,小写,匹配 .git/HEAD
(大写)文件,因此您得到 main 工作树在 / 中使用的提交,而不是当前添加的工作树在 / 中使用的提交。
我在 SourceTree 中看到了下图。我检查了 'dev' 分支,但我不明白为什么我要指向以蓝色突出显示的提交,而不是列表顶部的提交。
该图表明列表顶部的提交已在 dev 分支上提交(尽管我总是觉得 SourceTree 图令人困惑,但我不确定这是否真的是该图告诉我的) .如果我这样做:
git checkout dev
git reset --hard head
然后我仍然在以蓝色突出显示的同一个提交上。我也不清楚为什么 master 分支显示 'origin/HEAD' 的标记。列表顶部的提交不应该标记为'origin/HEAD'。这是怎么回事,我需要做些什么来解决这个问题吗?
该图仅显示未与当前分支合并的其他分支中的旧提交。对我来说不那么混乱检查 sourcetree 中的选择器 current branch
。
当您重置分支时,您可能没有 origin/dev
的最新版本,或者您看到的其他分支不一致。
尝试:
git stash # if needed
git checkout dev
git fetch origin dev
git reset --hard origin/dev # or git reset --hard HEAD
git stash pop # if needed
这里是 current branch
选择器所在的位置。这不会改变任何东西,只是可视化:
注意:您可以使用 git fetch --all
,但我通常不用,我不需要所有更新,只需要更新我正在处理的分支。
The graph suggests that the commit at the top of the list has been commited on the dev branch
这是对图表的错误解读。 dev
分支包含带有消息 "Merged in FD-50-Reboot-scheduler" 的提交及其下方的连接。它不包含上述任何提交。
顶部提交位于名为 origin/Demo-fake-data
的分支上。
Also I'm unclear on why the master branch is showing a marker of 'origin/HEAD'. Shouldn't the commit at the top of the list be marked 'origin/HEAD'. What's going on here, and is there something I need to do to fix this?
HEAD
是当前检出提交的特殊名称。 origin/HEAD
是在名为 origin
的远程服务器上签出的提交。这里没有什么可以解决的。如果你在一个团队中工作,你根本不应该弄乱远程仓库,除非你被分配了那个责任。
这都是一个侧边栏,但有时它很重要。有时,它不太重要或根本不重要,但值得了解:
HEAD
,全部大写,对Git有特殊意义。这也可以拼写为@
.head
,小写,没有特殊含义。
如果您使用的是不区分大小写的文件系统(例如,Windows 和 MacOS 默认设置),全小写的名称 head 最终会与 Git 存储 @
中的数据,无论如何,对于主要工作树,它被命名为 .git/HEAD
。所以它在 Windows 和 MacOS 上结束了某种工作。默认情况下,它在 Linux 上不起作用,并且在添加的工作树中无法正常工作。1 始终使用 @
或 HEAD
拼写以确保它在所有情况下都适用。
Also I'm unclear on why the master branch is showing a marker of 'origin/HEAD'. Shouldn't the commit at the top of the list be marked 'origin/HEAD'. What's going on here ...?
在 origin
结束。它在这些复制的名称前加上 origin/
前缀,以便您可以将它们与 您的 名称区分开来。这就是为什么你最终得到 origin/master
、origin/dev
等等:他们的 Git 有 master
、dev
等等。
就像您自己的存储库一样,它有一个特殊的名称 HEAD
以记住您检出的 b运行ch 名称,它们的 Git 有一个当前的 b运行ch 名称。在早期的某个时候,你 运行 git clone <em>url</em>
命令) 创建 您的 Git 存储库。你的 Git 调用了他们的 Git 并且不仅得到了他们的 b运行ch 名称列表,还得到了他们的 @
/ HEAD
current-b 的内容运行通道信息。在本例中是 master
——根据 origin/master
你的 Git 基于他们的 master
创建。 (哇!)
在你的 Git 完成所有阅读他们的 HEAD
(并看到 master
)的过程之后,以便阅读他们的 master
(你的 origin/master
) 为了创建您的 master
,您的 Git 在您自己的存储库中创建了一个 符号引用 以提醒您他们的 HEAD
包含他们的名称 master
您正在呼叫 origin/master
。该提醒几乎永远保留在您的存储库中。这不是很有用。事实上,它似乎完全没用——我自己从未发现它有任何用处。但它就在那里!
1在它可以正常工作的那些系统上,发生的是 head
,小写,匹配 .git/HEAD
(大写)文件,因此您得到 main 工作树在 / 中使用的提交,而不是当前添加的工作树在 / 中使用的提交。