目 录
3.1 查看提交历史
参数配置
显示每个版本的修改差异:git log -p -2 | git shortlog
单行显示3条记录:git log --pretty=oneline -3 | git log --oneline
图形化显示:git log --graph | gitk
缉杀利器:git blame
查看一个文件每一行的提交记录
查看第6行到11行代码是谁的提交:git blame file.c -L 6,+5
查看某个指定文件的提交修改历史:git log -C file.c #若查看具体修改内容,使用参数-c
更多参数
-p #展开版本之间的内容变化
-n #显示最近的n次更新
HEAD~2 -n #指定位置开始的n个提交
HEAD~3..HEAD #两个版本之间的提交
--state #仅显示行数变化
--author #仅显示和指定作者相关的提交
--committer #仅显示和指定提交者相关的提交
3.2 提交查找
关键字查找
— 不同的参数灵活使用
查找所有包含hello字符串的文件:git grep hello
显示关键字所在文件的行号:git grep -n hello
不显示内容,只显示文件名:git grep --name-only hello
查看每个文件有多少个匹配:git grep -c hello
— 在特定版本里查找
在v1.0版本里查找:git grep hello v1.0
组合查找
— 与查找、或查找
查找hello world:git grep -e hello --and -e world
查找hello或world:git grep -e hello --or -e world
查看命令帮助
git help grep
git grep --help
man git grep
3.3 提交修改
增补提交
— 修改最后一次提交:修改提交信息或者内容
git commit --amend
注:每次修改,commit对象的哈希值会改变的!
反转提交
— 将原来的提交取消掉:git revert SHA-1
— 反转多个提交:要先反转最后提交,防止冲突。此时原操作的逆操作都在暂存区,然后重新手动提交。
git revert -n HEAD #反转1
git revert -n SHA-1 #反转2
git commit -m "revert HEAD and SHA-1" #最后提交 或者使用 git revert --continue
反转时遇到冲突的解决方式
方式一:手动解决
进入发生的冲突文件,进行修改后,再暂存和提交
方式二:mergetool工具
git mergetool #进入修改冲突,再使用ax退出
3.4 Git置位
复位:将版本回退到工作区
git reset [--mixed] SHA-1
软复位:回退版本到暂存区
git reset --soft SHA-1
硬复位:会从版本库和工作目录中同时删除提交
git reset --hard SHA-1
3.5 给提交重新排序
通过人机交互模式改写历史
git rebase -i HEAD~3
— 编辑提交信息
— 退出,git会重新排序提交
— 该文件里的提交信息与使用git log --pretty=oneline显示的顺序正好相反
改写历史会生成新的commit
修改同一文件历史时,产生冲突手动解决步骤:
使用vi进入文件,添加每一步要增加的内容
保存退出,再使用git add提交到暂存区
再使用git rebase --continue命令进入交互模式,可以修改该步提交内容的备注信息
保存退出,若还有冲突,继续按上述步骤修改!
3.6 将多个提交合并为一个提交
把大象装到冰箱里三步合并为一步的操作步骤
1) 首先定位到要合并的三个提交
git rebase -i HEAD~3
2) 将最新2个提交合并到它们的parent
HEAD\HEAD^:将pick改为squash或s
3) 修改提交信息
4) 保存退出,查看提交历史
git log --oneline
会生成一个新的commit,而不是原来的那个HEAD^^
3.7 将一个提交分解为多个提交
大象装进冰箱一步分解为三步的操作步骤
1) 首先进入交互模式
git rebase -i HEAD^
2) 定位需要修改的commit,将pick改为edit或e
3) 检出到工作区,重新修改,多次提交
使用git status查看状态,用vi step(step是创建的文件)进入修改,先只保留step1的内容,
保存退出,提交到暂存区,提交到版本库(git commit --amend)
再继续修改,后面使用(git commit -m "commit info")
4) 继续rebase
git rebase --continue
5) 大功告成,查看提交记录
3.8 恢复隐藏的历史
找回“迷途的大雁”
删除的提交对象其实并没有真正删除,仍然保存在仓库里,称为悬垂提交对象。
通过 git reflog 命令查看当前状态
穿越历史
直接回退到第N次改变之前的版本,使用命令
git reset --hard master@{n}