Shi*_*ous 2 git version-control github git-clone git-checkout
我是 git 新手。我了解 git 基础知识以及使用 git 的开发过程,但是有一件事让我感到困惑。
每当我必须从包含多个项目的 git 存储库中提取某些内容时(示例),我都会看到以下说明步骤:
这对我来说有点令人费解。由于我已经拥有整个存储库,如果我可以复制文件夹并对其进行任何我喜欢的操作,我为什么要签出我感兴趣的项目?
前两个步骤只是告诉您git clone,这将克隆到某个文件夹中,然后复制cd到该文件夹中。如果第三步只需要没有要开始的工作master是回购或默认分支。通常,在 git 克隆之后,master默认情况下会选择分支。所以,如果你的指令想让你在其他yyy分支上工作,那么第三步就有意义了。
如果您的仓库中有一个同名的跟踪分支,运行git checkout yyy将自动创建一个本地分支。在这种情况下,它也会切换到新创建的本地分支。yyy
注意:我将此作为评论开始,但它足够长,并且确实可以使用一些格式,因此我将其移至答案。这是对您对 Tim Beigeleisen 的评论的回复:
如果您参考我的示例链接,检查“stereo_image_proc”是否有效,但我看不到它是分支之一,这是怎么回事?
git checkout stereo_image_proc没有抱怨的原因(而且似乎什么都不做,乍一看)是它git checkout本身实际上是将两个不同的命令组合成一个。这是一个特性,或者某些人(包括我的)认为的错误特性:git checkout's argument can be a branch name , or a path name。
具体来说:
git checkout branch 要求 Git 切换到,有时甚至创建然后切换到您在命令行中提供的名称的分支。
最后,切换到一个分支是一个令人惊讶的复杂过程,但它开始时非常简单:它改变了 Git 的概念,HEAD以便您位于命名分支上。它还有另一个非常有用的功能:在 Git 实际切换到(和/或创建)这个分支之前,Git 确保这不会破坏您在错误分支上意外启动的任何工作。
git checkout name1 name2 ... nameN,另一方面,要求 Git从某些命名或隐含的 commit 中提取特定文件。这通常最好写成,其中告诉 Git 该名称不应被视为分支名称。也就是说,假设你有一个文件名为而要提取它:再不会因为这项工作是在分支命名,但你想要的文件命名。所以告诉 Git:不是分支,而是文件。git checkout -- file--mastergit checkout mastermastermastergit checkout -- master
当您使用这种 . 时git checkout,您是在告诉 Git:我知道我开始编辑一些文件或文件,但我现在决定编辑这个文件或所有这些文件是一个错误。将它们全部恢复原样,将它们恢复为每个文件的先前版本。 例如,假设您有一个命名的文件README.txt,您开始编辑它,然后意识到您应该创建一个新的文档文件。您将添加的新内容复制到新文件中,但现在您想README.txt恢复到开始编辑之前的状态。所以你运行git checkout README.txt,这会清除你对文件的更改。
但就 Git 而言,在此处命名目录(或文件夹,如果您更喜欢该术语)意味着目录中的每个文件,包括递归的任何子目录。由于stereo_image_proc是目录,而不是分支名称,因此您将获得git checkout.
底线是git checkout stereo_image_proc告诉 Git清除您对该目录中的任何文件所做的任何更改。如果您没有进行任何更改,那么,没问题!但如果你有,这可能是灾难性的。
既然git checkout 确实有这两种模式——安全的开关分支模式和不安全的clobber所有我的工作模式——你必须记下你在每次运行时调用的是哪一种git checkout。
| 归档时间: |
|
| 查看次数: |
5923 次 |
| 最近记录: |