只修改了文件,回到当前快照的初始状态
比如,我们拿到a.txt文件里面的内容为:
1
我们对其进行更改,内容改为:
12
我们想回到我们修改之前的状态,这个时候使用
git reset HEAD --hard
HEAD
参数是本次提交的快照,--hard
指版本库(HEAD指向的节点),暂存区,工作区三者都回到快照节点(HEAD所指)的状态
git reset master --hard
因为HEAD
指向了master
分支指针,所以可以直接填分支名
git reset nodename --hard
更本质的做法是直接写本次快照的节点id
如果只想恢复单个文件,使用在reset后加上文件名即可。
add暂存库之后,想从暂存库删除,但是工作区保留修改
比如,我们拿到a.txt文件里面的内容为:
1
我们对其进行更改,内容改为:
12
这时我们执行add
命令,提示modified: a.txt
,我们此时想撤回add
的操作。
命令 | 描述 |
---|---|
git reset HEAD --mixed | --mixed 参数是将版本库,暂存区回到快照节点,工作区保持修改的状态 |
git reset HEAD | --mixed 是默认参数 |
git reset | HEAD 也是默认参数,回到本次快照节点的状态 |
git reset filename | 回到当前快照节点 |
git rm --cached filename | 和reset filename一样 ,而且文件会被标注为untracked ,也就是说执行了reset 并且执行了·rm |
commit之后想从新本次提交
1.只修改提交的信息
直接执行git commit amend
2.修改文件内容或者增加文件
1)首先执行 git add ./
将想要添加的内容提交到暂存区
2)然后执行git commit --amend
修改提交的内容
3.删除某些文件
假设我们修改了a.txt并增加了b.txt。
Changes to be committed:
modified: a.txt
new file: b.txt
执行执行commit
命令,我们想删除掉b.txt从新提交。
此时只需要提交b.txt意外的文件,不要提交b.txt文件即可
下面的代码是错误示范,提交后不能使用reset
来重置缓存区
我们要删除掉暂存区的b.txt。
命令|描述
--|--
`git reset filename`|从暂存区删除,继续最终,b.txt作为下次提交
`git rm --cached filename`|从暂存区删除,并且不追踪,但保留工作区的b.txt,我们可以手动删除
`git rm --cached filename`|从暂存区删除,并且不追踪,并且删除工作区的b.txt
如果有大量的文件,则建议先执行`git reset`将暂存区全部清空,然后再手动添加想要提交的文件。
2)然后执行git commit --amend
命令重新提交
错误操作:
对于想要删除提交的文件,我们很容易想到的是手动删除,然后执行add
,但是这并没有对暂存区的内容进行修改,所以提交的内容还是一样,这时一个大坑。一定要理解工作区,暂存区和仓库区三者的概念。