git rm 删除文件
注意以下所有操作都只针对工作区和暂存区,如果需要删除后真正生效,还需要额外提交
git rm 某个文件名
把文件从工作区和暂存区同时删除
git rm --cached 某个文件名
把文件从暂存区删除,但保留在工作区中
git rm -r *
递归删除某个目录下的所有子目录和文件
gitignore忽略文件
一般需要忽略的文件
git diff 比较差异
git diff
比较工作区中被追踪的文件和暂存区的不同。
- 新创建一个文件test git diff,不进行git add,也不输入内容,那么输入git diff 不会显示任何内容,因为他不是工作区中被追踪的内容。
- 此时在文件test git diff里输入内容
this is test1
,再次输入git diff 也不会显示任何内容,因为他仍然不是工作区中被追踪的内容。 - 此时进行git add,那么输入git diff 不显示任何内容,因为此时工作区的内容和暂存区内容一致。
- 修改文件内容为
this is test2
后直接输入git diff,那么会显示内容如下
实际开发中主要看红色字和绿色字即可,前者表示暂存区的内容,后者表示工作区的内容。
git diff HEAD
比较工作区和仓库的不同
- 仍然是刚刚的文件,修改内容为
this is test3
,然后git add. git commit,此时本地仓库中是this is test3
- 然后修改内容为
this is test2
,然后git add,此时暂存区中是this is test2
- 再次修改内容为
this is test1
,此时工作区、暂存区、本地仓库分别为test1 2 3 - 然后输入git diff HEAD,那么会显示内容如下:
实际开发中主要看红色字和绿色字即可,前者表示仓库的内容,后者表示工作区的内容。
git diff --cached和git diff --staged
比较暂存区和仓库的不同
用刚刚的文件,不作任何修改,直接输入
git diff --cached
应该会显示如下:
直接输入
git diff --cached
应该会显示如下:
那–cached和–staged有什么不同?
没有任何不同,单纯是随着git的发展,一个命令有了两个名称而已
git diff commit1哈希值 commit2哈希值 和 git diff HEAD~ HEAD
比较提交之间的不同
新创建一个文件,名字叫testgitdiff
- 更改文件内容为
this is commit a
,然后git add
、git commit -m 'commit a'
- 更改文件内容为
this is commit b
,然后git add
、git commit -m 'commit b'
- 更改文件内容为
this is commit c
,然后git add
、git commit -m 'commit c'
此时我们得到了三个提交,可以从pycharm等自带的git页面点进去每个提交,可以看到类似f7fbc36e
之类的就是该次提交唯一的短哈希值
也可以输入命令git log
得到每次提交的长哈希值。
同时可以看到HEAD此时位于commit c处,那么HEAD~1,表示倒数第二个提交就是在commit b,HEAD~2就是在commit a处。
在这里我们三个提交的信息如下:
提交 | 短哈希 | 长哈希 | 离HEAD距离 |
---|---|---|---|
commit a | 9c814a2e | 9c814a2e42d4417672097d9a786fc43abd31e044 | HEAD~2 |
commit b | 25daeaf3 | 25daeaf3456e9694f0b3cfb0cce17477f40a5fd5 | HEAD~1 |
commit c | f7fbc36e | f7fbc36ef975f9aba784079cc6d511acc6889b64 | HEAD |
随便测几个吧~懂我意思就好
git diff 分支名1 分支名2
比较分支仓库之间的不同
使用git checkout -b testgit
创建一个新分支,同时用git branch
查看当前分支有哪些
可以看到我这里的演示环境还是比较干净的,只有这两个分支。然后当前处于testgit分支上
- 新创建一个文件,名叫gittest,输入
git diff main testgit
,没有输出,因为此时文件没有在testgit的仓库里 - 进行git add,输入
git diff main testgit
,没有输出,因为此时文件仍没有在testgit的仓库里 - 进行git commit,输入
git diff main testgit
,输出如下
第一行输出了具体是哪两个文件不同。