我的Git筆記第三篇—改寫歷史

目  錄

3.1  查看提交歷史

3.2  提交查找

3.3  提交修改

3.4  Git置位

3.5  給提交重新排序

3.6  將多個提交合併爲一個提交

3.7  將一個提交分解爲多個提交

3.8  恢復隱藏的歷史


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}

發佈了10 篇原創文章 · 獲贊 1 · 訪問量 657
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章