2009-09-30 51 views
7

在git中,我怎样才能检出我的远程/跟踪分支的HEAD版本? 基本上,我想在git中做一个'svn checkout'。如何检出我的远程/跟踪分支的HEAD版本

我觉得最接近的东西是'git fetch',但是从手册页中,我不知道如何使用它检出1个特定文件?

回答

4

Git没有检索单个文件的概念。它总是在整个网络中移动提交。

一旦您完成了某个远程存储库的git clone,您可以git checkout remotename/branch将该分支上的最新文件版本检出到您的工作副本中。如果你想修改它们,你应该git checkout -b <yourbranchname> remotename/branch启动一个本地分支。这可能是

git branch --track mybranchname remotename/branchname 
git checkout mybranchname 

能够更好地这样做,你的本地分行将“跟踪”远程分支,并默认为推动并从该分支拉动。

15

首先,注意:远程仓库可以有多个分支; HEAD的意思是(对于本地开发和本地分支)当前已检出的分支,对于远程而言,远程跟踪分支(符号引用)remote/HEAD表示默认分支在远程。没有像'分支头'这样的东西; HEAD是指向分支的指针(或者有时指向提交)。其次,Git在整个树级别(存储库中的所有文件)上运行(如Novelocrat wrote)。在Git中,你签出一个分支(尽管你也可以从某个分支签出一个文件版本到工作目录,但它的运行更少)。


在Git中,您只能在某些本地分支上创建新的提交。您不能直接在远程跟踪分支上创建提交,因为它们意在跟踪远程存储库的分支(并且您将失去对提取的工作)。

因此简单的“git checkout origin”(假设远程称为origin),这是快捷方式“git checkout origin/HEAD”,这通常是“git checkout origin/master”将检出远程跟踪分支的状态到未命名的分支,即所谓的分离头。如果您只想查看/浏览远程跟踪分支状态,这是一个很好的解决方案。

如果使用“git checkout --track origin/master”将创建本地分支master,其目的是要跟踪(跟踪)远程跟踪分支origin/master。请注意,git-clone自动为远程origin(通常为origin/master)的默认分支(origin/HEAD)设置此类本地分支(通常为master),因此您不必这样做。然后在分支master上取得(如果需要),然后尝试将本地更改与远程存储库中各个分支中的更改合并,然后执行简单的“git pull”。如果远程没有变化,它是“最新”状态,你的本地分支不会改变;如果你的本地分支没有变化,但是远程分支,则本地分支简单地进入远程追踪分支的状态,这被称为“快进”。你可以在这里想到“git pull”这个非常非常粗略的等同于“svn update”。

你也可以用“git reset --hard origin”迫使当地分公司退远程跟踪分支的状态。请注意,--hard意味着在这里强制覆盖工作目录,所以任何未完成的更改将会丢失!小心使用。

最后,如果你想远程跟踪分支检出单个文件(即在工作文件的目录版本,因为它是在远程跟踪分支),你可以简单地使用的“pathspec”形式git-checkout,即“git checkout origin -- file”。如果您只想查看远程追踪分支中文件的外观,请使用“git show origin:path/to/file”。

HTH

相关问题