本章主要測試講解
- 利用
git rebase
命令,多樣化處理本地 commit 記錄代兵。例如- 修改提交信息
- 刪除提交信息
- 合并提交信息
- ……
測試過程內(nèi)容較多,每個(gè)步驟都逐一截圖以便真實(shí)說明,也有列示用法颇玷。若不感興趣,可直接查看總結(jié)部分就缆。
測試過程
前置說明
在本地開發(fā)時(shí)帖渠,有提交很多次,但是其中提交信息竭宰,可能有些是可以合并到一起空郊,有的可能沒必要可以刪除,有的需要修改 commit measssge……
這些都可以使用git rebase
命令的相關(guān)參數(shù)指令實(shí)現(xiàn)切揭。
項(xiàng)目準(zhǔn)備
在本地的 tensorflow 項(xiàng)目中添加幾次提交
測試步驟
修改非最近一次的提交信息
假如需要修改 commit id 為 699b10610 的 commit message狞甚。
因?yàn)檫@不是最近的一條 commit,所以 git commit --amend
無法使用伴箩。
需要使用 git rebase 指令相關(guān)參數(shù)
輸入git rebase -i <commit id>
入愧,進(jìn)入 interactive 模式
其中<commit id="" style="box-sizing: border-box;">為此次想要調(diào)整這個(gè)節(jié)點(diǎn)(commit id)開始至 HEAD 中間的提交紀(jì)錄。</commit>
因?yàn)槲覀円薷?commit id 為 699b10610 的 commit message嗤谚,所以此處git rebase -i
后面的 commit id棺蛛,可以是 699b10610 的前一個(gè) 4f092caa。
輸入指令后巩步,會(huì)彈出文件旁赊,編輯需要調(diào)整的 commit 記錄,以及指令說明椅野,如下圖
注意:在 Rebase 狀態(tài)看到的這個(gè)紀(jì)錄是跟我們平持粘看的紀(jì)錄是反過來的,越新的 Commit 在越下面竟闪。
常用指令說明:
- pick: 只接使用這個(gè) commit离福,不做任何調(diào)整
- reword: 使用這個(gè) commit,只調(diào)整 commit message
- squash: 使用這個(gè) commit 融入前一個(gè) commit 中炼蛤,合并兩個(gè) commit message 來表示(可以修改)
- fixup: 使用這個(gè) commit 融入前一個(gè) commit 中妖爷,使用前一個(gè) commit 的 message 來表示(不可修改)
- drop: 直接移除這個(gè) commit
所以,我需要修改 commit id 為 699b10610 的 commit message理朋,只需要把這份文件中第一行改為reword + 修改后的message
再保存執(zhí)行即可
修改后的文件
保存并關(guān)閉文件之后絮识,會(huì)彈出一份新的文件绿聘,主要用于確認(rèn)和修改 commit meassge,如下圖
保存并退出后次舌,可以看到git rebase
命令執(zhí)行完成
查看日志熄攘,之前 commit id 為 699b10610 的提交,已經(jīng)被修改為 commit id 為 11d4ec53彼念,內(nèi)容也為修改后的內(nèi)容挪圾。但是其它內(nèi)容沒有異動(dòng)。
合并多條 commit 內(nèi)容
同上逐沙,使用git rebase -i
指令即可修改
- squash: 使用這個(gè) commit 融入前一個(gè) commit 中洛史,合并兩個(gè) commit message 來表示(可以修改)
- fixup: 使用這個(gè) commit 融入前一個(gè) commit 中,使用前一個(gè) commit 的 message 來表示(不可修改)
根據(jù)上述指令說明酱吝,這可能需要執(zhí)行多次也殖。如果需要一并修改 commit message,要使用 squash务热,用第一條代替合并后的 commit message忆嗜,使用 fixup。
示例:合并 commit id aa0312a 和 c78d4fe 和 026345ca崎岂,并修改 commit meassge 為:“修改 tensorflow1.txt 內(nèi)容”
使用git rebase -i
進(jìn)入 interactive 模式
修改彈出文件第三句指令為 squash (注意捆毫,這個(gè) commit 的 squash,需要從下往上合并冲甘,否則可能會(huì)報(bào) error: cannot 'squash' without a previous commit
錯(cuò)誤)
然后會(huì)彈出合并 commit message 的確認(rèn)和修改畫面
我修改如下
保存退出后可看到如下信息
此時(shí)查看日志绩卤,就發(fā)現(xiàn)之前的 3 條 commit,變成兩條了
所以江醇,再執(zhí)行一次濒憋,即可達(dá)到最開始的需求,3 合 1
修改后
修改前
刪除指定 commit message
這個(gè)不再贅述陶夜,同樣使用git rebase -i <commit id>
進(jìn)入 interactive 模式凛驮,把需要?jiǎng)h除的信息從 pick 改為 drop,或者直接刪除掉条辟,再保存即可黔夭。
注意:
不想刪除的信息,就不要異動(dòng)羽嫡;
rebase 的 <commit id>
要在被刪除提交信息之前本姥,不然看不到;
如果刪除的那次提交會(huì)導(dǎo)致沖突杭棵,根據(jù)解決沖突的效果婚惫,影響對(duì)應(yīng) commit 信息保留結(jié)果。
其它
其它指令不再一一說明,簡單帶過辰妙。例如
想要調(diào)整提交信息順序,直接把 interactive 模式中看到的信息對(duì)應(yīng)調(diào)整即可甫窟,諸如此類密浑。
想要在已提交信息中間添加新的 commit 信息, 在新增起點(diǎn)的<commit id>的 interactive粗井,模式改為 edit尔破,
這會(huì)中止 rebase,然后就可以使用git commit --amend
修改當(dāng)前信息浇衬,
或者實(shí)際修改文件/夾懒构,再使用git add
和git commit
命令去添加新的 commit 信息。
直到添加完成耘擂,再使用git rebase --continue
即可胆剧。
……
不要一定要注意,慎重醉冤,因?yàn)橛幸恍┨峤缓秃罄m(xù)的提交是相互依存的秩霍,刪除或者變動(dòng)之前的可能會(huì)導(dǎo)致后續(xù)的提交出現(xiàn)異常,導(dǎo)致項(xiàng)目出現(xiàn)問題蚁阳。
總結(jié)
使用git rebase -i <commit id>
铃绒,可以對(duì)本地的提交記錄做很多變動(dòng)。
在進(jìn)入 interactive 模式后螺捐,對(duì)該文件(git-rebase-todo)做相應(yīng)修改:
- 想要?jiǎng)h除颠悬,使用 drop;
- 想要修改定血,使用 reword赔癌;
- 想要合并,使用 squash 和 fixup澜沟;
- 想要新增届榄,使用 edit;
- 想要調(diào)整順序倔喂,調(diào)整 pick
- ……
更多內(nèi)容可以自行嘗試铝条。