git diff, git checkout, git rm

用经典图来镇个楼
经典图镇楼

这三个都涉及到两个object的交互和比较,牢记一点:

--cached 特指 暂存区/索引区

git diff

默认被比较的就是工作区,进行比较的就是比工作区高一级的(i.e. 暂存区)

git diff  [to-compare = higher level of compared] [compared = working-tree] 

被比较的还是工作区,指明了是HEAD,就是工作区和版本库的比较

git diff HEAD

指明了cached参数则默认被比较的就是暂存区,进行比较的就是比工作区高一级的(i.e. 版本库)

git diff --cached

git checkout

觉得这个博客说的比较详细

# 默认是切换分支版本。如果xx不是一个分支,就会把文件切出来
git checkout xx
git checkout 26a2e80	 # 切一个分支
git checkout .  # 将工作区恢复成版本库/缓存区的情况

# 为了防止分支和文件重名(一般概率比较小),最好加 --(前后都有空格) 
git checkout -- fileName

# 如果不是从暂存区挑文件

上面说“将工作区恢复成版本库/缓存区的情况”,那到底是什么呢?

把文件在工作区的修改全部撤销,这里有俩种情况
1)文件修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
2)已经添加到暂存区后,又做了修改,现在撤销修改回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit 和git add时的状态。

我总结就是:暂存区有相应文件,就恢复成暂存区的;没有相应文件,就恢复成版本库的。

  • 如果是已经删除了的文件,想要checkout是没有办法的,只能先reset,然后checkout

这个博客我觉得讲得挺好

git rm

这个博客很详细
删除工作区的东西并提交到暂存库 ( = rm + add )

git rm xxx.txt

如果工作区和版本库关于xxx.txt,有不一样,就会报错(怕你没注意到,删错了,毕竟下一步就是提交,就会覆盖到版本库),如果没关系,就是要删除这个文件,也不管版本库的事情了,就加个 -f 参数。然后就git commit就行。

删除暂存区文件,但保留工作区的文件,并且将这次删除放入暂存区。
如果不小心将文件add进了暂存区,可以用这个撤回add(不影响工作区),而不是使用git checkout !

git rm --cached

常用的就是

git rm -r --cached .
git rm -r --cached dirName

r参数表示递归删除文件夹


Guess you like

Origin blog.csdn.net/Hesy_H/article/details/112750699