为什么在git clone之后进行git checkout?

时间:2018-09-06 08:59:14

标签: git github version-control git-checkout git-clone

我是git的新手。我了解git的基础知识以及使用git的开发过程,但是有一件事使我感到困惑。

每当我必须从git存储库中提取一些包含多个项目(example)的内容时,就会看到以下说明步骤:

  1. git clone xxx
  2. cd xxx
  3. git checkout yyy

这让我有些困惑。因为我已经拥有完整的存储库,所以如果我可以只复制文件夹并用它做任何我想做的事,为什么还要结帐我感兴趣的项目?

2 个答案:

答案 0 :(得分:3)

前两个步骤只是告诉您 <?xml version="1.0" encoding="UTF-8"?> <project clover="1.01"> <package name="A:B:C"> </package> </project> </coverage> ,它将克隆到某个文件夹中,然后告诉import React, {Component} from 'react'; import ComponentOne from 'componentone'; import ComponentTwo from 'componenttwo'; class MyComponent extends Component { state = { show:"" } render() { let content = null; if(show === "showOne"){ content = <ComponentOne />; }else if (show === "showTwo"){ content = <ComponentTwo />; } return ( <div> <ul> <li id="show-one"> <button onclick={this.setState({ show: "showOne" })}>Show One</button> </li> <li id="show-two"> <button onclick={this.setState({ show: "showTwo" })}>Show Two</button> </li> </ul> {content} </div> ) } } 到该文件夹​​中。仅当您不想想要开始使用该仓库的git clone或默认分支时,才需要执行第三步。通常,在git克隆之后,默认情况下会选择cd分支。因此,如果您的指令希望您在其他master分支上工作,那么第三步就很有意义。

运行master将自动创建一个名为yyy的本地分支。 如果您的存储库中有一个同名的跟踪分支。在这种情况下,它也会切换到新创建的本地分支。

答案 1 :(得分:2)

注意:我以注释开始,但是它足够长,并且确实可以使用一些格式,因此将其移至答案。这是对您对Tim Beigeleisen的评论的答复:

  

如果您引用我的示例链接,请检查“ stereo_image_proc”是否有效,但是我看不到它是分支之一,怎么会这样?

git checkout stereo_image_proc不抱怨(乍一看似乎什么也没做)的原因是git checkout本身实际上是两个不同命令组合成一个命令。在某些人(包括我的人)看来,这是一个功能或不适当的功能:git checkout的参数可以是分支名称路径名称。 / p>

特别是:

  • git checkout branch要求Git切换,或者有时甚至创建,然后切换到您在命令行上提供名称的分支。

    最后,将切换到是一个非常复杂的过程,但它起步很简单:它更改了Git的HEAD概念,因此您位于命名分支上。它具有另一个非常有用的功能:在Git实际切换到(和/或创建)该分支之前,Git确保这不会掩盖您偶然在错误上启动的任何工作。 em>分支。

  • 另一方面,
  • git checkout name1 name2 ... nameN要求Git从某些命名或隐式提交中提取特定文件。通常最好用git checkout -- file来写,其中--告诉Git,名称​​不应被视为分支。也就是说,假设您有一个名为master文件并且要提取它:那么git checkout master将不起作用,因为这是名为{的分支 {1}},但是您想要名为master文件。因此master告诉Git:不是分支,是文件。

    当您使用这种git checkout -- master时,您是在告诉Git:我知道我开始编辑一个或多个文件,但是现在我决定编辑该文件或所有这些文件,是一个错误。将它们放回原样,将它们还原为每个文件的先前版本。例如,假设您有一个名为git checkout的文件,并开始对其进行编辑,然后意识到您应该创建一个 new 文档文件。您将添加的新内容复制到新文件中,但是现在您希望README.txt回到开始编辑之前的状态。因此,您运行README.txt,然后清除对文件的更改

    但就Git而言,在此处命名目录(或文件夹,如果您更喜欢该术语),则意味着该目录中的每个文件,包括递归的所有子目录。由于git checkout README.txt是目录,而不是分支名称,因此您将获得stereo_image_proc的第二种形式。

最重要的是,git checkout告诉Git 清除对该目录中任何文件所做的任何更改。如果您没有进行任何更改,那么,没问题!但是,如果有的话,这可能是灾难性的。

由于git checkout stereo_image_proc 这两种模式-安全的开关分支模式和不安全的我所有的工作模式—每次运行git checkout时,都要记下正在调用的是哪个。