什么是git中的checkout
?git checkout的真正含义是什么?
我知道一旦你做checkout
到一个特定的分支,HEAD
指向该分支。但它的真正含义是什么?这是否意味着我可以在那个分支上工作?如果是的话,那么,如果没有检查分支机构,我无法处理它?
另外,remote checkout
是什么意思?它有什么用处?
什么是git中的checkout
?git checkout的真正含义是什么?
我知道一旦你做checkout
到一个特定的分支,HEAD
指向该分支。但它的真正含义是什么?这是否意味着我可以在那个分支上工作?如果是的话,那么,如果没有检查分支机构,我无法处理它?
另外,remote checkout
是什么意思?它有什么用处?
正如您所注意到的,HEAD
是一个标签,注明您在提交树中的位置。当你从一个提交移动到另一个提交时,它随你移动。 git checkout <commit>
是在提交树中移动的基本机制,将您的焦点(HEAD
)移动到指定的提交。
的提交可以通过任何多种方式来指定,提交散列,分行名称,标签名,相对语法(HEAD^
,HEAD~1
,等)等。将结账视为改变分支通常是有用的,并且从这个角度来看有一些选项可行,但它们都参考提交。
要结帐一个提交有一些副作用,除了移动HEAD
左右。
-b
选项将根据当前提交创建一个新分支,然后使其生效。--track
选项签出的分支,可以意识到一个远程分支--orphan
选择一个新的分支创建(像-b
),但不会基于任何现有的承诺。有一些更多的选择,你可以在git checkout man-page了解,所有这些都围绕着从一个移动提交到另一个 - 只是在什么样的影响不同的是此举除了感动HEAD
。
所以,听起来像“结账”确实意味着完全不同的东西(与TFS相比 - 无论如何 - TFS相当于“得到”一个特定的“变更集”)。很高兴我看了这个! - “最新”有没有魔术常数? (在TFS中它是“T”) - 这样我们可以在不知道“HEAD”标签的情况下下载最新版本的代码? – BrainSlugs83 2014-08-31 02:03:30
如果你在分支上,分支名称是该分支的最新提交 - 如果你不在分支上,那么你正在进行最新的提交。我会使用log命令在资源库中查找最近的提交,而不考虑分支,然后手动移动到它 - 但我确定它可以根据需要自动执行。 – 2014-09-03 13:26:40
关于最后一段:请注意'git checkout
“检出”表示您从存储库中获取任何给定的提交,并在工作目录中重新创建关联文件和目录树的状态。
当您签出的提交是不一个分支头(例如git checkout HEAD~2
),你是在一个所谓的分离头。你可以在这里创建提交,但是一旦你切换到不同的分支,那些提交将不能被分支名称恢复,甚至可能在一段时间后被垃圾收集器删除。
让我解释一些使用文件,文件夹和分支结帐的使用情况,以便它可以帮助理解。
假设我们有一个名为dev
和index.html
的文件夹,一切都被跟踪并且工作目录是干净的。
如果我不小心更改了文件名index.html
,并且我想撤消该操作,我将简单地使用git checkout index.html
它将从存储库当前选定的分支恢复该文件状态。
现在,如果我在dev
文件夹中进行了一些更改,并且想要恢复该文件夹。我可以使用git checkout dev
,但是如果已经有一个名为dev
的分支,而不是检查该文件夹,它将拉下该分支。为了避免这种情况,我宁愿做git checkout -- dev
。
现在,这里裸露双横条站当前分支,并要求git从当前选定的分支文件夹dev
。
同样如果我做git checkout alpha dev
它会从alpha分支下拉开发文件夹。
这个答案是针对你的第一个问题'git checkout really mean'。
没有采取。是的,我已经了解了它的含义。即指向头等,但我想知道从“结账代码 - 进行更改 - 检查”的角度来看还是不同? – daehaai 2013-03-08 14:42:19
投票下来...请发表一些意见!!不要说你没有看到答案。我在寻找更多的细节信息。 – daehaai 2013-03-08 15:20:23
@antonijn - 我试着用Google搜索这个问题 - 这是第一个结果 - 有种悲伤,一旦我到达这里,我看到问题已经关闭,每个人都有这种疯狂的态度 - 我来自TFS背景,我开始怀疑“Checkout”意味着GIT中完全不同的东西。我想知道它在git-land中的含义。 – BrainSlugs83 2014-08-31 01:57:24