git签出的真正含义是什么?

git签出的真正含义是什么?,git,git-checkout,Git,Git Checkout,git中的checkouts是什么 我知道,一旦您对某个特定分支执行签出,则头将指向该分支。但这到底意味着什么呢?这是否意味着我可以在那家分行工作?如果是的话,那么,如果没有签出分支机构,我就无法处理它 另外,远程结账意味着什么?它有什么用处?“签出”意味着您从存储库中获取任何给定的提交,并在工作目录中重新创建关联文件和目录树的状态 当您签出的提交不是分支头(例如,git checkout head~2)时,您处于所谓的分离头上。您可以在此处创建提交,但一旦切换到其他分支,这些提交将无法通过分支

git中的
checkout
s是什么

我知道,一旦您对某个特定分支执行
签出
,则
头将指向该分支。但这到底意味着什么呢?这是否意味着我可以在那家分行工作?如果是的话,那么,如果没有签出分支机构,我就无法处理它

另外,
远程结账
意味着什么?它有什么用处?

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


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

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

提交可以通过多种方式中的任何一种指定,提交哈希、分支名称、标记名称、相关语法(
HEAD^
HEAD~1
)等等。考虑签出要改变分支通常是有用的,并且有一些从那个角度起作用的选项,但是它们都引用提交。< /P> 签出提交除了移动
头部
之外还有一些副作用

  • 工作目录将更新为签出提交的状态
  • 如果指定了分支名称,签出将激活该分支。活动分支将随添加的任何新提交一起移动。
    • 使用
      -b
      选项,将根据当前提交创建一个新分支,然后使其处于活动状态
    • 使用
      --track
      选项,可以使签出的分支知道远程分支
    • 使用
      --orphan
      选项将创建一个新分支(与
      -b
      类似),但不会基于任何现有提交

还有一些选项,您可以在中阅读,所有这些选项都围绕着从一个提交移动到另一个提交——除了移动

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

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

如果我不小心更改了文件名
index.html
,并且我想撤销它,我只需使用
git checkout index.html
即可从当前选择的存储库恢复该文件状态

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

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

类似地,如果我执行
git checkout alpha dev
,它将从alpha分支中下拉dev文件夹


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

无需回答。是的,我有,而且我遇到了它的含义的理论。i、 e.指向头部等。但我想从“签出代码-进行更改-签入”的角度知道这是不同的吗?@antonijn——我试着用谷歌搜索这个问题——这是第一个结果——有点悲哀,我一到这里就看到问题被解决了,每个人都有这种疯狂的态度——我来自TFS背景,我开始怀疑“Checkout”在GIT中的含义完全不同。我想知道它在git-land中的含义。因此,听起来“checkout”的含义完全不同(无论如何,与TFS相比——TFS的等价物是“获取”特定的“变更集”)。很高兴我查到了“最新”有什么神奇的常数吗?(在TFS中是“T”)——这样我们就可以下载最新版本的代码,而不知道“HEAD”标签?如果您在分支上,分支名称是该分支的最新提交——如果您不在分支上,则是最新提交。我会使用log命令在存储库中查找最近的提交,而不考虑分支,然后手动移动到它——但我相信如果需要,它可以自动进行。关于最后一段:请注意,
git checkout
不会切换分支。您的解释没有错,但您忘记了一个非常重要的问题(和潜在的危险)用例:
git checkout
。在您的最后一行中,这个答案是针对您的第一个问题“git checkout real mean”。您是否从“mean”分支签出“real”文件夹:P