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 restoregit 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。


 

posted @ 2025-02-05 15:12  海_纳百川  阅读(562)  评论(0)    收藏  举报
本站总访问量