git checkout真正意味着什么?

dae*_*aai 85 git git-checkout

什么是checkoutgit?

我知道一旦你做checkout了一个特定的分支,HEAD那个分支的点.但这究竟意味着什么?这是否意味着我可以在那个分支上工作?如果是的话,那么,如果不检查分支机构,我就无法继续工作了?

还有什么remote checkout意思呢?它有用吗?

Dav*_*ulp 49

如您所述,HEAD是一个标签,指出您在提交树中的位置.当您从一次提交移动到另一次提交时,它会随您移动. git checkout <commit>是在提交树中移动的基本机制,将focus(HEAD)移动到指定的提交.

提交可以通过任何多种方式来指定,提交散列,分行名称,标签名称,相对语法(HEAD^,HEAD~1等)等.考虑将结帐更改为分支通常很有用,并且有一些选项可以从这个角度工作,但它们都引用了提交.

检查提交除了HEAD四处移动之外还有一些副作用.

  • 工作目录更新为已签出提交的状态.
  • 如果指定了分支名称,则checkout使该分支处于活动状态.活动分支将随添加的任何新提交一起移动.
    • 使用该-b选项,将根据当前提交创建新分支,然后激活.
    • 通过--track选项,可以使签出的分支知道远程分支
    • 使用该--orphan选项创建一个新分支(如同-b)但不会基于任何现有提交.

还有一些选项,您可以在git checkout手册页中阅读,所有选项都围绕从一个提交移动到另一个提交 - 只是改变移动除了移动之外的效果HEAD.

  • 因此,听起来“结帐”确实意味着完全不同的东西(无论如何与 TFS 相比——TFS 等效项是“获取”特定的“变更集”)。很高兴我查到了这个!——“最新”有什么神奇的常数吗?(在 TFS 中它是“T”)——这样我们就可以在不知道“HEAD”标签的情况下下载最新版本的代码? (2认同)

owa*_*786 21

让我解释一下结帐的一些用例,包括文件,文件夹和分支,以便它可以帮助理解.

假设我们有文件夹命名dev,index.html并且Everything也被跟踪,工作目录是干净的.

如果我不小心更改了文件名index.html,我想要撤消,我将只使用git checkout index.html它将从存储库当前选择的分支恢复该文件状态.

现在,如果我在dev文件夹中进行了一些更改,并希望恢复它.我可以使用,git checkout dev但如果已经分支命名dev而不是checkout该文件夹它将拉下该分支.为了避免这种情况,我宁愿这样做git checkout -- dev.

现在这里裸双击表示当前分支并向dev当前所选分支询问git for folder .

同样如果我这样做git checkout alpha dev将从alpha分支下拉dev文件夹.

这个答案是针对你的第一个问题'git checkout'的意思.

  • 在你的最后一行_这个答案是你的第一个问题“git checkout真的意味着”。_你是否从“mean”分支签出“really”文件夹:P (4认同)

Mic*_*ild 19

"签出"意味着您从存储库中获取任何给定的提交,并在工作目录中重新创建关联文件和目录树的状态.

当你签出一个不是分支头的提交(例如git checkout HEAD~2)时,你就是一个所谓的分离头.您可以在此处创建提交,但是一旦切换到其他分支,这些提交将无法通过分支名称恢复,甚至可能在一段时间后被垃圾回收器删除.