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