# 关于撤销
1. 本地修改,未git add
可以使用git checkout 命令:
git checkout -- [file]
作用:让这个文件回到最近一次git commit 或git add 时的状态
2. 修改完git add,未git commit
可以使用git reset 命令,该命令不止可以用在版本回退,也可以用来撤销暂存区。用法:
git reset HEAD [file]
作用:把暂存区的修改撤销掉(unstage),重新放回工作区。
随后使用git status 查看,其状态与情况1一样,此时可以再使用git checkout 命令撤销工作区的修改。
另一种情况是要把git add 进暂存区的文件移出暂存区,使其变成未跟踪状态,可以使用git rm 命令。用法:
git rm --cached [file]
作用:把暂存区的文件移出,使其变成未跟踪状态。
3. 修改完git commit,未git push
到这一步进行撤销就是常提到的:版本回退。
有三种回退方式:
-
git reset --hard HEAD^
往前回退一个版本,回退完了后工作区就是上一个版本的代码了,并且是clean的。连工作区也一起回退。 -
git reset --soft HEAD^
往前回退一个版本,并且将这次错误的提交的代码改动,放在暂存区里。回退到git commit之前,修改保留到git add。 -
git reset --mixed HEAD^
往前回退一个版本,并且将这次错误的提交的代码改动,放在工作区里。回退到git add之前,修改保留在工作区。 ?
# 关于改动
1. 使用git status
最常用的一个命令
最常用的命令,功能十分强大,可以列出工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)加上远程的git仓库(Remote Directory)四个工作区域之间的差异状态。
- 查看工作区哪些文件未被跟踪
- 查看工作区哪些文件被修改且未使用
git add 添加到暂存区Stage - 查看暂存区Stage哪些文件未使用
git commit 提交到本地仓库 - 查看本地仓库有多少提交commit未使用
git push 推送到远程仓库
如果改动的文件过多,可以使用简短表示:
git status -s
最左边的红色字母表示文件状态,对应的状态有:
状态 | 含义 |
---|
‘’ | unmodified | M | modified | A | added | D | deleted | R | renamed | C | copied | U | updated but unmerged | ?? | untracked | !! | ignored |
关于撤销可以看撤销栏目。
2. 使用git diff
也是很常用的命令,需要了解几个扩展用法,用到再查也可以。
作用:查看工作区和暂存区的文件差异。
在改动工作区的文件后,尚未执行git add 命令,则会与暂存区的内容产生差异,使用
git diff [file]
可以查看该文件与上次git add 的内容上的差异。
特殊情况:如果上一次刚使用完git commit 提交到本地仓库(版本库),此时暂存区的内容为空,那么这个时候如果改动工作区上的文件,使用git diff 则查看的是工作区与最后一次commit的差异。
从原理上看,当我们在做了一次commit之后,工作区 、暂存区,和版本库三个区域的sha-1版本号是同步的,sha-1号相同表示为同一份内容。
因此本质上还是查看工作区和暂存区的差异。
扩展用法
2.1 暂存区和版本库的文件差异
git diff --cached
git diff --staged
git diff --cached [path/file]
git diff --cached [commid-id] [path/file]
显示【暂存区(已add但未commit文件)】和【最后一次commit(HEAD)】之间的所有不相同文件的增删改
上面这两个命令作用相同。
2.2 (工作区&暂存区)和版本库的差异
git diff HEAD
git diff HEAD^
git diff HEAD~
显示【工作目录(已track但未add文件)和暂存区(已add但未commit文件) 】与【最后一次commit】之间的的所有不相同文件的增删改。
2.3 两个分支最新commit内容的差异
git diff branch1 branch2
git diff branch1 branch2 --stat
git diff branch1 branch2 [path/file]
2.4 两个commit的差异
git diff [commid-id1] [commit-id2]
2.5 打补丁
通过对上面的各种git diff 用法后面添加> [patch] 表示将差异做成补丁。
git diff > [patch]
git diff --cached > [patch]
git diff --HEAD > [patch]
git diff [file] > [patch]
做成补丁后,在其他机器上对应目录下使用:
git apply [patch]
git apply --reject [patch]
可以将补丁打上。
在应用补丁之前,可以先检验一下补丁能否应用:
git apply --check [patch]
3. 使用git log
git log可以查看历史提交信息。
直接使用git log会列出所有的commit信息。如果版本库的提交比较多,可以使用
git log --oneline
作用:把所有历史提交以一行一提交的形式列出。
还有常用的,指定列出多少个历史提交
git log -2
作用:列出前2次历史提交。
当然可以结合起来用
git log -2 --oneline
即以一行一个提交的形式列出前两次提交。
还有一个可以查看log并且同时显示出改动的代码,相当于结合git diff 使用
git log -p
|