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提交,但是一旦你切换到不同的分支,这些提交将不能被分支名称恢复,甚至在一段时间之后可能会被垃圾收集器删除。

让我解释一些使用文件,文件夹和分支结帐的使用情况,这样可以帮助理解。

假设我们有名为devindex.html文件夹,一切都被跟踪,工作目录是干净的。

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

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

现在,这里裸露的双破折号表示当前分支,并要求git从当前选定分支的文件夹dev

同样如果我做git checkout alpha dev它将拉下从alpha分支的开发文件夹。

这个答案是你的第一个问题'git结帐真的意味着'。