在 git 中,如何 check out 我的远程/跟踪分支的 HEAD 版本? 基本上,我想在 git 中执行“svn checkout”。
我认为我找到的最接近的东西是“git fetch”,但是从手册页中,我不知道如何使用它 check out 1 个特定文件?
最佳答案
首先要注意:远程仓库可以有多个分支; HEAD 也意味着(对于本地开发和本地分支)当前 checkout 分支,对于远程远程跟踪分支(符号引用)remote/HEAD
意味着远程上的默认分支。没有像“分支机构负责人”这样的东西; HEAD 是指向分支(或有时指向提交)的指针。
其次,Git 在整个树级别(存储库中的所有文件)上运行(作为 Novelocrat wrote)。在 Git 中,您 check out 一个分支(虽然您也可以从某个分支 check out 一个文件版本到工作目录,但它是较少的 commkon 操作)。
在 Git 中,您只能在某些本地分支之上创建新提交。您不能直接在远程跟踪分支上创建提交,因为它们旨在跟随远程存储库的分支(并且您会丢失在获取时所做的工作)。
因此简单的“git checkout origin
”(假设远程称为origin
),这是“git checkout origin/HEAD
”的快捷方式",通常是 "git checkout origin/master
"会将 远程跟踪分支的状态 checkout 到未命名的分支,即所谓的分离 HEAD。如果您只想查看/浏览远程跟踪分支状态,这是一个很好的解决方案。
如果你使用“git checkout --track origin/master
”将创建本地分支master
,这意味着跟随(跟踪)远程跟踪分支 origin/master
。请注意,git-clone 会自动为远程 origin
(通常origin/master
),所以你不必这样做。然后在分支 master
上简单的“git pull
”将获取(如果需要),并尝试将您的本地更改与远程存储库中相应分支中的更改 merge 。如果远程没有变化,它是“最新”状态,你的本地分支不会改变;如果你的本地分支没有变化但在远程,那么本地分支只是前进到远程跟踪分支的状态,这被称为“快进”。您可以将此处的“git pull
”视为非常粗略地等同于“svn update
”。
您还可以使用“git reset --hard origin
”强制您的本地分支倒退到远程跟踪分支的状态。请注意,--hard
在这里意味着强制覆盖工作目录,因此任何未提交的更改都将丢失!小心使用。
最后,如果您想从远程跟踪分支中 check out 单个文件(即在工作目录中拥有与远程跟踪分支中一样的文件版本),您可以简单地使用 ' git-checkout 的 pathspec' 形式,即“git checkout origin -- file
”。如果您只想查看文件在远程跟踪分支中的样子,请使用“git show origin:path/to/file
”。
HTH
关于git - 如何 checkout 我的远程/跟踪分支的 HEAD 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1501149/