目 錄
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}