问题描述
当我们创建了一个 commit,但发现其中包含了一些不应该在本次提交中的文件时,需要撤销 commit 和 add 操作。
解决步骤
1. 查看当前状态
git status
2. 撤销最近的 commit
git reset --soft HEAD^
注:这会将文件恢复到已暂存(staged)状态
3. 从暂存区撤销不需要的文件
# 撤销单个文件
git reset HEAD 文件名
# 撤销多个文件
git reset HEAD 文件名1 文件名2
# 撤销所有文件
git reset HEAD .
4. 重新添加需要的文件
git add 需要的文件1 需要的文件2
5. 重新提交
git commit -m "新的提交信息"
其他常用命令
查看暂存区文件
git ls-files --stage
撤销工作区修改
git checkout -- 文件名
查看修改内容
git diff
注意事项
reset 参数说明
-
--soft
: 只撤销 commit,保留修改 -
--mixed
(默认): 撤销 commit 和 add,保留修改 -
--hard
: 撤销 commit 和 add,并删除修改(慎用)
完整操作示例
# 撤销最近的 commit
git reset --soft HEAD^
# 查看状态
git status
# 撤销不需要的文件的暂存
git reset HEAD 不需要的文件
# 添加需要的文件
git add 需要的文件
# 重新提交
git commit -m "新的提交信息"
远程仓库注意事项
如果 commit 已经推送到远程:
- 不建议使用 reset
- 可以创建新的 commit 来修正错误
- 或者与团队沟通后使用 force push(慎用)