git 中的 checkout
是什么?
我知道一旦您对特定分支执行 checkout
,HEAD
就会指向该分支。但它的真正含义是什么?这是否意味着我可以在那个分支上工作?如果是,那么,如果不检查分支,我就无法处理它?
另外,remote checkout
是什么意思?它有什么用处?
如您所述,HEAD
是一个标签,指出您在提交树中的位置。当您从一个提交转移到另一个提交时,它会与您一起移动。 git checkout <commit>
是在提交树中移动的基本机制,将您的焦点 (HEAD
) 移动到指定的提交。
可以通过多种方式指定提交,提交哈希、分支名称、标签名称、相关语法(HEAD^
、HEAD~1
等)等等。将结帐视为更改分支通常很有用,并且从这个角度来看,有一些选项可以工作,但它们都引用了提交。
签出提交除了移动 HEAD
之外还有一些副作用。
工作目录更新为签出提交的状态。
如果指定了分支名称,则 checkout 会激活该分支。活动分支将与添加的任何新提交一起移动。使用 -b 选项,将根据当前提交创建一个新分支,然后将其激活。使用 --track 选项,签出的分支可以通过 --orphan 选项了解远程分支,创建一个新分支(如使用 -b),但不会基于任何现有提交。
使用 -b 选项,将根据当前提交创建一个新分支,然后将其激活。
使用 --track 选项,可以使签出的分支知道远程分支
使用 --orphan 选项会创建一个新分支(就像使用 -b 一样),但不会基于任何现有提交。
还有一些其他选项,您可以在 git checkout man-page 中了解这些选项,所有这些选项都围绕着从一个提交移动到另一个提交 - 只是移动除了移动 HEAD
之外的影响有所不同。
让我解释一些使用文件、文件夹和分支结帐的用例,以便有助于理解。
假设我们有名为 dev
和 index.html
的文件夹,所有内容都被跟踪并且工作目录是干净的。
如果我不小心更改了文件名 index.html
并且我想撤消它,我将简单地使用 git checkout index.html
它将从存储库当前选择的分支恢复该文件状态。
现在,如果我在 dev
文件夹中进行了一些更改并想要恢复它。我可以使用 git checkout dev
,但如果已经有名为 dev
的分支而不是检查该文件夹,它将拉下该分支。为了避免这种情况,我宁愿做git checkout -- dev
。
现在这里裸双破折号代表当前分支,并从当前选定的分支向 git 询问文件夹 dev
。
同样,如果我执行 git checkout alpha dev
,它将从 alpha 分支拉下 dev 文件夹。
这个答案是针对您的第一个问题“git checkout 真的意味着”。
really
分支和 mean
文件夹吗?
“签出”意味着您从存储库中获取任何给定的提交,并在工作目录中重新创建相关文件和目录树的状态。
当您签出一个不是分支头(例如git checkout HEAD~2
)的提交时,您处于所谓的分离头上。您可以在此处创建提交,但是一旦切换到不同的分支,这些提交将无法通过分支名称恢复,甚至可能在一段时间后被垃圾收集器删除。
不定期副业成功案例分享
git checkout <commit> <path>
不会切换分支。git checkout <path>
。