可以实现相同的功能,比如还原本地文件,但是reset更强调“撤销”,比如撤销暂存区、撤销暂存区和本地,而checkout更强调“替换”,比如用暂存区内容替换本地,用head指向目录替换暂存区和本地。
reset强调,撤销
git reset head - - filename
撤销上次暂存(取消暂存区的内容,用head指向的目录(版本库)替换暂存区)
如果只删除暂存,保留工作区,可以使用git rm --cached -r filename,-r表示递归删除
git reset - -hard head:
撤销本地和暂存区的所有变动(用head指向的目录(版本库)替换本地和暂存区)
git reset – hard origin/master
撤销本地、暂存区、版本库(用远程服务器的origin/master替换本地、暂存区、版本库)
checkout强调,替换
git checkout [- -] filename
- 用暂存区的内容替换工作区的文件。比如working directory修改了,但是想放弃这些修改,那么使用git checkout -- a.txt 放弃对a.txt的修改
git checkout head filename
- 用head指向的目录(版本库)替换暂存区和工作区的文件
head
git的命令中经常会用到head,可以将head看做一个指针,head指本地的版本库,可以将head替换为远程库,比如origin/master,origin代表一个地址,master是分支。
origin
- origin代表远程仓库的地址 ,在config文件中
原文:https://blog.csdn.net/wangjun5159/article/details/51397475