git - 如何 checkout 我的远程/跟踪分支的 HEAD 版本

标签 git

在 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/

相关文章:

git - 无法 push GIT,但 rebase 为最新

git - 无法推送到存储库 - 带有 HashMap 的错误

java - Heroku 在日志中安装了错误的 jdk (8) 版本,但在终端中安装了良好的 jdk (11) 版本,这导致目标版本 : 11 无效

git submodule init 没有 pull 最新的提交

git - 如何让其他组织团队成员可以使用私有(private) GitHub 存储库?

git - 为每个存储库的 Git 指定 SSH 配置

git - 关于 Git GUI 推送错误

Git 从精确提交中 check out 所有文件

git - 如何恢复对 GitHub 中存储库的推送

windows - Windows 的 SourceTree 不工作