ChatGPT解决这个技术问题 Extra ChatGPT

git checkouts 的真正含义是什么?

git 中的 checkout 是什么?

我知道一旦您对特定分支执行 checkoutHEAD 就会指向该分支。但它的真正含义是什么?这是否意味着我可以在那个分支上工作?如果是,那么,如果不检查分支,我就无法处理它?

另外,remote checkout 是什么意思?它有什么用处?

没有采取。是的,我有并且我遇到了这意味着什么的理论。即指向 HEAD 等。但我想从“结帐代码 - 进行更改 - 签入”的角度了解还是不同?
@antonijn——我试过用谷歌搜索这个问题——这是第一个结果——有点难过,一旦我到了这里,我看到问题已经结束,每个人都有这种疯狂的态度——我来自 TFS 背景,我我开始怀疑“结帐”在 GIT 中意味着完全不同的东西。我想知道它在 git-land 中的含义。

P
Parsa

如您所述,HEAD 是一个标签,指出您在提交树中的位置。当您从一个提交转移到另一个提交时,它会与您一起移动。 git checkout <commit> 是在提交树中移动的基本机制,将您的焦点 (HEAD) 移动到指定的提交。

可以通过多种方式指定提交,提交哈希、分支名称、标签名称、相关语法(HEAD^HEAD~1 等)等等。将结帐视为更改分支通常很有用,并且从这个角度来看,有一些选项可以工作,但它们都引用了提交。

签出提交除了移动 HEAD 之外还有一些副作用。

工作目录更新为签出提交的状态。

如果指定了分支名称,则 checkout 会激活该分支。活动分支将与添加的任何新提交一起移动。使用 -b 选项,将根据当前提交创建一个新分支,然后将其激活。使用 --track 选项,签出的分支可以通过 --orphan 选项了解远程分支,创建一个新分支(如使用 -b),但不会基于任何现有提交。

使用 -b 选项,将根据当前提交创建一个新分支,然后将其激活。

使用 --track 选项,可以使签出的分支知道远程分支

使用 --orphan 选项会创建一个新分支(就像使用 -b 一样),但不会基于任何现有提交。

还有一些其他选项,您可以在 git checkout man-page 中了解这些选项,所有这些选项都围绕着从一个提交移动到另一个提交 - 只是移动除了移动 HEAD 之外的影响有所不同。


因此,听起来“签出”确实意味着完全不同的东西(无论如何与 TFS 相比——TFS 等价物将是“获取”特定的“变更集”)。很高兴我查到了这个! ——“最新”有什么神奇的常数吗? (在 TFS 中是“T”)——这样我们就可以在不知道“HEAD”标签的情况下下载最新版本的代码?
如果您在一个分支上,则分支名称是该分支的最新提交——如果您不在一个分支上,那么您就是最新提交。我会使用 log 命令在存储库中查找最近的提交,而不考虑分支,然后手动移动到它——但我确信如果需要它可以自动化。
关于最后一段:请注意 git checkout <commit> <path> 不会切换分支。
您的解释没有错,但您忘记了一个非常重要(且具有潜在危险)的用例:git checkout <path>
J
Jarvis

让我解释一些使用文件、文件夹和分支结帐的用例,以便有助于理解。

假设我们有名为 devindex.html 的文件夹,所有内容都被跟踪并且工作目录是干净的。

如果我不小心更改了文件名 index.html 并且我想撤消它,我将简单地使用 git checkout index.html 它将从存储库当前选择的分支恢复该文件状态。

现在,如果我在 dev 文件夹中进行了一些更改并想要恢复它。我可以使用 git checkout dev,但如果已经有名为 dev 的分支而不是检查该文件夹,它将拉下该分支。为了避免这种情况,我宁愿做git checkout -- dev

现在这里裸双破折号代表当前分支,并从当前选定的分支向 git 询问文件夹 dev

同样,如果我执行 git checkout alpha dev,它将从 alpha 分支拉下 dev 文件夹。

这个答案是针对您的第一个问题“git checkout 真的意味着”。


在你的最后一行这个答案是你的第一个问题'git checkout 真的意味着'。您是否正在从“平均”分支检查“真正”文件夹:P
那不应该是 really 分支和 mean 文件夹吗?
M
Michael Wild

“签出”意味着您从存储库中获取任何给定的提交,并在工作目录中重新创建相关文件和目录树的状态。

当您签出一个不是分支头(例如git checkout HEAD~2)的提交时,您处于所谓的分离头上。您可以在此处创建提交,但是一旦切换到不同的分支,这些提交将无法通过分支名称恢复,甚至可能在一段时间后被垃圾收集器删除。