如何查看我的远程/跟踪分支的HEAD版本

时间:2009-09-30 23:13:08

标签: git

在git中,如何查看我的远程/跟踪分支的HEAD版本? 基本上,我想在git中进行'svn checkout'。

我认为我找到的最接近的是“git fetch”,但是从手册页中,我不知道如何使用它查看1个特定文件?

3 个答案:

答案 0 :(得分:16)

首先,注意:远程存储库可以有多个分支; HEAD表示(对于本地开发和本地分支)当前已检出分支,对于远程远程跟踪分支(符号引用)remote/HEAD表示远程上的默认分支。没有“分支的头”这样的东西; HEAD是指向分支(或有时是提交)的指针。

其次,Git在整个树级(存储库中的所有文件)上运行(作为Novelocrat wrote)。在Git中你检查一个分支(虽然你也可以从一些分支机构检查文件版本到工作目录,但它不太常见)。


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

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

如果您使用“git checkout --track origin/master”,则会创建本地分支master,这意味着关注(跟踪)远程跟踪分支 origin/master。请注意,git-clone会自动为远程master(通常为origin/HEAD)的默认分支(origin)设置此类本地分支(通常为origin/master),因此您不会必须这样做。然后,当在分支git pull上获取(如果需要)时,简单的“master”会尝试将本地更改与远程存储库中相应分支中的更改合并。如果遥控器没有变化,则为“最新”状态,您的本地分支不会改变;如果你的本地分支没有变化但是在远程,那么本地分支只是前进到远程跟踪分支的状态,这称为“快进”。你可以在这里想到“git pull”与非常粗略的“svn update”相同。

您还可以使用“git reset --hard origin”强制您的本地分支快退到远程跟踪分支状态。请注意,--hard表示强制覆盖工作目录,因此任何未经注释的更改都将丢失!小心使用。

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

HTH

答案 1 :(得分:4)

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

完成某个远程存储库的git clone后,您可以git checkout remotename/branch在工作副本中检出该分支上的最新文件版本。如果要修改它们,则应git checkout -b <yourbranchname> remotename/branch启动本地分支。

可能会更好
git branch --track mybranchname remotename/branchname
git checkout mybranchname

这样你的本地分支将“跟踪”远程分支,并默认从该分支推送和拉动。

答案 2 :(得分:0)

有时您可能会遇到detached HEAD问题:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits
you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you
create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at c3ff60a rename

然后列出所有分支,您将看到:

$ git branch -a
* (HEAD detached at origin/master)
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

如果您要签出remotes / origin / HEAD引用的分支remotes/origin/HEAD -> origin/master,则可以执行以下操作:

HEAD_BRANCH="$(git branch -r | grep 'HEAD')"
HEAD_BRANCH="${HEAD_BRANCH#*origin/HEAD -> *origin/}"
git checkout "$HEAD_BRANCH"

这样您就可以签出远程/跟踪分支的“ HEAD”版本