1、git status
查看工作区和暂存区的状态
2、 日志:git log 和 git reflog
-
git log
显示当前分支所有提交过的版本信息,常用选项。
git log [filename]
显示指定文件的修改[提交]记录
示例:git log --since=2.weeks --author=longpp --grep=fix --oneline

git reflog
可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。示例:
git reflog

3、 撤销、暂存与回滚
情况一、文件被修改了,但未执行git add操作,想丢弃修改(working tree内撤销)
- 指定文件:
git checkout [filename]
- 所有修改的文件:
git checkout .
情况二、文件已经执行了git add操作,但是本次又不想提交它了(index内撤销)
-
git reset HEAD [filename]
,取消暂存区的指定文件,此时状态会回到情况一 - 再对暂存区剩下的要提交的执行commit就行了
- 不传filename则会取消暂存区所有修改
情况三、文件已修改未git add,需要暂存已经修改的内容
- 执行
git stash save '本次暂存备注'
- stash并不会存新增的文件,新增的文件要先add再stash
- 查看暂存的列表:
git stash list
- 弹出暂存列表里最新一次的缓存:
git stash pop
- git stash 文档
- 如果已经操作了git add又不想提交了,想把修改暂存起来,那先按情况二操作,再暂存
4、 git checkout、git reset 和 git revert
常用操作:
命令 | 提交层面 | 文件层面 | 说明 |
---|---|---|---|
checkout | 切换分支/标签git checkout [branch name] 、git checkout [tag name] 。会将当前HEAD指针指向指定的提交 |
丢弃工作区的修改git checkout [filename] 、或将文件切换到某次提交里的版本git checkout [commit_id] [file name]
|
切换分支只切换HEAD的指针,不会移动分支本身的指针 |
reset | 只应操作那些还未与他人共享过的变更:git reset --hard [commit_id] 。否则建议使用revert |
将文件从暂存区中移除git reset HEAD [filename]
|
会改变分支所指向的提交,并且丢弃它之后的提交 |
revert | 撤销公共分支上的变更git revert [commit_id]
|
不支持 | 通过新建一个提交来撤销之前的某次提交。因为不会重写提交历史,被认为是一种安全的撤销操作。 |



5、git blame
git blame [filename]
查看文件每行的作者、修改时间、提交SHA-1值

6、git rm 删除
- 删除本地和暂存区中的文件:
git rm a.txt
(前提是文件未修改),如果修改过,会删除失败,此时需要使用 -f 或 --cached -
git rm -f a.txt
强制删除本地和暂存区中的文件 -
git rm --cached a.txt
删除暂存区中的文件,保留本地文件
网友评论