文章目录
- 1.简介
- 2.格式
- 3.选项
- 4.示例
-
- [1. 切换分支](#1. 切换分支)
- [2. 创建并切换到新分支](#2. 创建并切换到新分支)
- [3. 强制创建分支(覆盖已存在分支)](#3. 强制创建分支(覆盖已存在分支))
- [4. 恢复文件](#4. 恢复文件)
- [5. 切换到历史提交(分离头指针状态)](#5. 切换到历史提交(分离头指针状态))
- [6. 创建独立空白分支](#6. 创建独立空白分支)
- [7. 跟踪远程分支](#7. 跟踪远程分支)
- 8.常见组合
- 5.小结
- 参考文献
1.简介
git checkout 是 Git 中一个功能强大的命令,主要用于切换分支 和恢复工作区文件。它可以帮助你在不同分支之间快速切换,也可以将文件恢复到之前的某个提交状态。
不过需要注意的是,由于 git checkout 承担了两种不同的职责,Git 2.23 版本引入了更专用的 git switch(切换分支)和 git restore(恢复文件)命令。但 git checkout 依然广泛使用,理解它仍然很有必要。
2.格式
bash
# 切换分支的格式
git checkout [-b|-B] <new-branch> [<start-point>]
# 恢复文件的格式
git checkout [<提交>] -- <文件路径>
起始点(start-point)是指你希望新分支基于哪个提交(commit)来创建。
起始点可以是如下类型:
| 起始点类型 | 示例 | 说明 |
|---|---|---|
| 本地分支名 | main, develop |
新分支基于该分支的最新提交 |
| 远程分支名 | origin/main, upstream/develop |
新分支基于远程分支的最新提交(常用于跟踪远程分支) |
| 提交哈希 | abc1234, 3f4a5b6 |
新分支基于历史中的某个特定提交 |
| 标签 | v1.2.3, release-2024 |
新分支基于某个标签指向的提交 |
| HEAD 相对引用 | HEAD, HEAD~2, HEAD^ |
HEAD 表示当前分支的最新提交,~2 表示往前 2 个提交 |
3.选项
bash
-b <分支名>
创建并切换到新分支
-B <分支名>
强制创建并切换到新分支(如果分支已存在则重置)
--track
创建新分支并跟踪远程分支
--orphan <分支名>
创建一个没有父提交的全新分支(适合创建全新独立项目)
-f, --force
强制切换(丢弃未提交的更改,需谨慎)
-- <pathspec>
恢复指定文件
.
恢复当前目录所有文件
4.示例
1. 切换分支
bash
# 切换到已有分支
git checkout main
git checkout develop
# 切换到上一个分支(快速往返)
git checkout -
2. 创建并切换到新分支
bash
# 基于当前分支创建新分支
git checkout -b feature/new-login
# 基于指定分支创建新分支
git checkout -b feature/new-login develop
# 基于远程分支创建本地跟踪分支
git checkout -b feature/new-login origin/develop
3. 强制创建分支(覆盖已存在分支)
bash
# 如果 feature/old 分支已存在,会强制重置到当前 HEAD
git checkout -B feature/old
4. 恢复文件
bash
# 恢复工作区的某个文件到最近一次提交的状态
git checkout -- main.go
# 恢复当前目录所有文件(慎用!会丢失未提交的改动)
git checkout -- .
# 从指定的提交中恢复某个文件
git checkout abc1234 -- main.go
5. 切换到历史提交(分离头指针状态)
bash
# 切换到某个历史提交(会进入 detached HEAD 状态)
git checkout abc1234
# 基于历史提交创建新分支(保留修改)
git checkout -b new-branch abc1234
6. 创建独立空白分支
bash
# 创建一个全新空白分支(没有提交历史)
git checkout --orphan gh-pages
# 清空暂存区
git rm -rf .
# 添加新内容...
7. 跟踪远程分支
bash
# 创建本地分支并自动跟踪远程分支
git checkout --track origin/feature/remote-branch
8.常见组合
| 使用场景 | 推荐命令 | 说明 |
|---|---|---|
| 切换分支 | git checkout main |
切换到 main 分支 |
| 创建并切换新分支 | git checkout -b new |
基于当前分支创建 |
| 恢复单个文件 | git checkout -- file.go |
放弃该文件的本地修改 |
| 放弃所有本地修改 | git checkout -- . |
⚠️ 不可逆,请确认后执行 |
| 切换到上一个分支 | git checkout - |
快速在两个分支间切换 |
| 检出历史提交 | git checkout abc123 |
进入分离头指针状态,建议配合 -b 创建分支 |
5.小结
git checkout 既能切换分支,也能恢复文件。它的 -b 选项用于创建新分支,-- 用于恢复文件。
推荐新用户了解 git switch 和 git restore 作为更专注的替代。