git 小技巧

BaldButStrong發表於2024-10-24

一、git 撤回或修改之前提交併且不影響 被撤回或修改提交之後的提交資訊操作

1.  首先將指定分支克隆下來並備份

git clone -b xxx httpxxxxx    // xxx 分支名

cp xxx xxx_backup

2. 先備份對應提交的patch 並移動到別的目錄中,防止後續git reset 的時候清掉
git format-match commitid -1
mv ./0001xxxxx.patch ../

3. 回退到要撤回或修改的提交的前一個提交
    git log     // 檢視提交號

    commit id4
xxx
commit id3
xxx
commit id2
xxx
commit id1
xxx
…………

// 假如要撤回或修改的為comit id2,則先退到commit id1
git reset --hard id1

// 若修改提交,可以將之前備份的patch先打上去
git apply ../0001xxx.patch 

// 若要更改提交人資訊 設定git配置
git config user.name "YourName"
git config user.email "xxxx@highgo.com"

// 進行提交
git commit -m "xxxx"

// 將修改提交的後續提交接入
git cherry-pick id3^..id4 // 指定一段連續的提交接入當前提交下,左值為較為舊的提交,右值為較為新的提交

// 最後 push 到指定的分支xxx, 一般push是會拒絕提交,加上-f 就可以,但是-f 慎用
git push origin xxx -f  

二、其他git小技巧

1. 顯示該資料夾及其內部檔案的所有提交記錄簡要資訊
    git log --oneline
    
2. 每次提交中具體修改了哪些檔案
    git log --name-status
    
3. 每次提交的詳細內容變化
    git log -p 
    
4. 某幾行的歷史提交資訊
    git blame -L start,end 

5. --recursive 一起克隆子庫,等價於先克隆主庫在進入主庫目錄中git submodule update --init等命令克隆子庫, --depth只克隆下來指定數量的提交記錄 
    git clone --recursive https://github.com/xxxx --depth=10