git checkout是什么意思?
什么是在git checkout
?
我知道一旦你checkout
到一个特定的分支, HEAD
指向那个分支。 但是这到底意味着什么呢? 这是否意味着我可以在那个分支上工作? 如果是的话,那么,如果没有检查一个分支,我就无法工作呢?
另外, remote checkout
是什么意思? 它有什么用处?
正如你所说, HEAD
是一个标签,注明你在提交树中的位置。 当你从一个提交移动到另一个提交时,它随你移动。 git checkout <commit>
是在提交树中移动的基本机制,将焦点( HEAD
)移动到指定的提交。
提交可以通过多种方式指定,提交哈希,分支名称,标记名称,相对语法( HEAD^
, HEAD~1
等)等等。 将结账视为改变分支通常是有用的,并且从这个angular度来看有一些选项是可行的,但是它们都引用了提交。
检查一个提交有一些副作用,而不是移动HEAD
。
- 工作目录更新为检出提交的状态。
- 如果指定了分支名称,则检出使该分支活动。 活动分支将随着所添加的任何新提交一起移动。
- 使用
-b
选项将根据当前的提交创build一个新的分支,然后激活。 - 使用
--track
选项可以使已检出的分支知道远程分支 - 用
--orphan
选项创build一个新的分支(就像使用-b
),但不会基于任何现有的提交。
- 使用
还有其他几个选项,你可以在git checkout的man-page中看到这些选项,所有这些选项都围绕着从一个提交移动到另一个提交 – 只是在移动HEAD
之外还有什么影响。
“检出”意味着您从存储库中获取任何给定的提交,并在工作目录中重新创build关联文件和目录树的状态。
当你签出一个不是分支头的提交(例如, git checkout HEAD~2
)时,你就是在一个所谓的分离头上。 你可以在这里创build提交,但是一旦你切换到不同的分支,这些提交将不能被分支名称恢复,甚至在一段时间之后可能会被垃圾收集器删除。
让我解释一些使用文件,文件夹和分支结帐的使用情况,这样可以帮助理解。
假设我们有名为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结帐真的意味着'。