SUNT的随手记

闲的时候,做一些对自己有益的事

0%

git checkout和git reset区别

在 Git 中,git checkout <filename>git reset <filename> 都可以用于恢复文件的状态,但它们的操作对象和恢复的状态不同。具体来说:

1. git checkout <filename>

  • 作用:将文件恢复到上次提交(即 HEAD 提交)时的状态。
  • 操作对象:只影响工作区(Working Directory),不会更改暂存区(Stage/Index)中的内容。
  • 常见用途:用于丢弃工作区中对某个文件的修改,恢复到上次提交的版本。

示例

1
git checkout filename

适用场景

  • 当你在工作区中对文件进行了修改,但还没有 git add 暂存。
  • 想丢弃这些修改,恢复到当前分支的最新提交版本。

注意

  • git checkout 操作只影响工作区,不会更改暂存区,也不会更改仓库中的最新提交。
  • 如果文件已在暂存区中被修改,git checkout 不会影响这些修改。

2. git reset <filename>

  • 作用:将文件恢复到上次提交(HEAD 提交)时的状态,同时将暂存区的更改撤销。
  • 操作对象:影响暂存区(Stage/Index),将暂存区中的文件恢复到 HEAD 提交时的版本。
  • 常见用途:用于取消 git add 对文件的操作,将暂存区的内容恢复到 HEAD 提交。

示例

1
git reset filename

适用场景

  • 当你已经将文件 git add 到暂存区,但还没有 git commit,想撤销这个操作。
  • 恢复暂存区的文件状态,便于重新选择需要提交的文件。

注意

  • git reset <filename> 不会影响工作区中的文件内容。如果文件在工作区中有修改但未暂存,git reset 只会影响暂存区中的内容,工作区内容保持不变。

区别总结

功能 git checkout <filename> git reset <filename>
恢复内容 仅恢复工作区的文件到 HEAD 提交状态 恢复暂存区的文件到 HEAD 提交状态
影响范围 只影响工作区,不更改暂存区内容 只影响暂存区,不更改工作区内容
使用场景 丢弃工作区中的更改,使文件恢复到最新提交状态 取消已暂存的文件,将文件从暂存区中移除