git restore 和 git checkout学习
git restore 和 git checkout 都可以用于恢复或切换 Git 仓库中的文件和分支,但它们的作用和适用场景有所不同。
1. git restore(Git 2.23+ 引入)
git restore 主要用于 恢复 工作区的文件,适用于 Git 2.23 及以上版本,Git 推荐用它来替代 git checkout 进行文件恢复操作。
主要作用:
- 撤销未提交的更改(恢复到
HEAD或指定的 commit) - 撤销
git add(从暂存区恢复到工作区)
常见用法:
# 恢复单个文件到最新的 commit 版本(丢弃修改)
git restore <文件名>
# 恢复多个文件(如 .c 文件)
git restore *.c
# 从暂存区恢复文件(撤销 git add)
git restore --staged <文件名>
# 指定从某个 commit 还原文件
git restore --source <commit_hash> <文件名>
2. git checkout
git checkout 主要用于 切换分支 和 恢复文件(较老的 Git 版本),在 Git 2.23 之后,Git 推荐用 git restore 和 git switch 来替代 git checkout。
主要作用:
- 切换分支(Git 2.23+ 推荐用
git switch) - 恢复文件的修改(Git 2.23+ 推荐用
git restore) - 创建新分支
常见用法:
# 切换到某个分支
git checkout <分支名>
# 切换到上一个分支
git checkout -
# 创建新分支并切换
git checkout -b <新分支名>
# 恢复文件到最新 commit(与 git restore 类似)
git checkout -- <文件名>
# 从指定 commit 恢复文件
git checkout <commit_hash> -- <文件名>
3. git restore vs git checkout
| 操作 | git restore | git checkout |
|---|---|---|
| 恢复文件到最新 commit | ✅ 推荐使用 | ⚠️ 旧方法(仍可用) |
撤销 git add |
✅ | ❌ |
| 切换分支 | ❌ | ✅(但推荐用 git switch) |
| 创建新分支 | ❌ | ✅ |
结论:
- 恢复文件用
git restore - 切换分支用
git switch(或git checkout) - 旧版 Git 仍可用
git checkout
你使用的 Git 版本如果较新,建议尽量使用 git restore 和 git switch 以符合 Git 的最新推荐习惯。
在使用 git restore 时,恢复到最新的 commit 是指 当前分支的最新 commit,而不是远程分支的 commit。
具体情况:
-
如果你当前的本地分支落后于远程分支 2 个提交,那么
git restore恢复的是本地分支的最新 commit,而不是远程分支的提交。也就是说,
git restore会恢复到你本地的工作区和暂存区的状态,并不会自动更新为远程分支的状态。如果你希望恢复到远程分支的最新 commit,需要先进行同步操作,比如git fetch或git pull。
示例:
假设你当前在 feature 分支,远程分支 origin/feature 比你的本地分支 feature 多了 2 个提交。
git restore只会将文件恢复到本地分支的最新 commit。- 如果你想要恢复到远程分支的最新状态,你需要先执行:
git fetch # 获取远程分支的更新 git restore --source=origin/feature <文件名>
通过这种方式,git restore 会将文件恢复到远程 origin/feature 分支的最新 commit。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18699510,如有侵权联系删除

浙公网安备 33010602011771号