文章目录
- 1. 现象描述
- 2. 解决
- 3. add了多余的文件需要从add中删除
- 4. commit中撤销文件
- 4.1 查看commit的内容
- 4.2 撤销commit里的一部分内容
1. 现象描述
今天add
文件的时候,不小心把一个不需要提交的也给加上了,但是删除的时候错误使用了git rm
命令,导致工作区文件被删除。
// 误删除
$ git rm XXX/CMakeLists.txt
> rm 'XXX/CMakeLists.txt'//查看当前状态
$ git status
> Changes to be committed:(use "git restore --staged ..." to unstage)deleted: XXXX/CMakeLists.txt
2. 解决
感谢How to recover file after git rm abc.c
?,只需要
$ git reset -- XXXX/CMakeLists.txt
> Unstaged changes after reset:
D XXX/CMakeLists.txt
$ git checkout -- XXXX/CMakeLists.txt
然后就可以看到rm
的文件已经回来了
参考:
3. add了多余的文件需要从add中删除
其实之前已经总结过这个问题了,在这里的1. git add相关部分中。
这里再写一遍,加深印象。根据 Stack Overflower:How do I undo ‘git add’ before commit?中的内容,其实只需要
git reset <file>
git reset
- 在老版本的git中&#xff0c;上述命令其实等价于
git reset HEAD
和git reset HEAD
。 - 如果
HEAD
没有定义&#xff08;即到目前为止你的repo还没有进行过任何提交&#xff09;或者对HEAD
有歧义&#xff08;比如你创建了一个叫HEAD
的分支&#xff0c;这是个很蠢的事情&#xff0c;不能这么干&#xff09;。 - 不过从Git1.8.2开始就变了&#xff0c;所以在比较新的git版本中&#xff0c;就可以不带
HEAD
的去使用这个命令了
原版回答的截图
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/1e3db12dd78db092.webp)
参考&#xff1a;
4. commit中撤销文件
如果不幸&#xff0c;add的时候没注意&#xff0c;commit的时候才看到具体的信息&#xff0c;也可以救
4.1 查看commit的内容
$ git log
commit e914375df (HEAD -> yourbranch)
Author: yourname<youremail&#64;XXX.com>
Date: Thu Jul 14 10:28:02 2022 &#43;0800add try catchcommit 73a20f94c5ed5 (origin/yourbranch)
Author: yourname<youremail&#64;XXX.com>
Date: Thu Jul 14 09:28:30 2022 &#43;0800export one header file
$ git show e914375df
参考&#xff1a;
- Git 查看某次commit的内容
- How can I see the changes in a Git commit?
4.2 撤销commit里的一部分内容
以下内容均来自&#xff1a;stack overflow
——Remove files from Git commit
老的操作&#xff08;也是目前网上搜到比较多的操作&#xff09;
$ git reflog
edffvva4 (HEAD -> 0.2) HEAD&#64;{0}: commit: XXX
evsvefbf (origin/0.2) HEAD&#64;{1}: commit: XXX
9veevvf9 HEAD&#64;{2}: pull: Fast-forward
cbgrbee8 HEAD&#64;{3}: pull: Fast-forward
3r35t4d4 HEAD&#64;{4}: commit: XXXX
4t5ggbd0 HEAD&#64;{5}: commit: XXXX
g5g35g3r HEAD&#64;{6}: commit: XXXX
$ git reset --soft HEAD^
git reset --soft HEAD~1
git reset HEAD path/to/unwanted_file
Git 2.23.0之后的新操作&#xff0c;可以直接使用restore
命令列出不想要的文件
$ git version
git version 2.37.0.windows.1
git restore --staged path/to/unwanted_file
git commit -c ORIG_HEAD
注意
- 使用
git restore
那两句命令后&#xff0c;再去push&#xff0c;没有生效&#xff0c;想要剔除不commit的内容还是在。 - TBD
参考&#xff1a;
- stackoverflow&#xff1a;Remove files from Git commit
- How To Remove Files From Git Commit
- git如何撤销