7.9 Git Tools - Rerere (讀書筆記) git rerere的使用詳解

參考:Fix conflicts only once with git rerere

下載初始化倉庫-百度云耸别,直接開始操作幔摸,不寫太多理論啦拒迅,沒毛用件舵。

打開rerere功能

$ git config --global rerere.enabled true
  • 也可以在自己的倉庫的創(chuàng)建.git/rr-cache文件夾來開啟該功能卸察,但是用命令開啟的話,全局都開啟铅祸。創(chuàng)建文件夾只對當(dāng)前git repository有效坑质。

初始化倉庫(下載倉庫默認(rèn)的樣子就是這樣)

倉庫的三個文件

master的hello.txt

test的hello.txt
$ git log --oneline --all --graph --decorate
此時倉庫中兩個分支

merge合并hello.txt并記錄沖突解決方式

$ git merge master
沖突,第三行表示 rerere記錄一個preimage

上面輸出顯示記錄到preimage临梗,就是指在.gti/rr-cache下生成啦一個preimage

preimage的內(nèi)容涡扼,跟下面的沖突hello.txt差不多

hello.txt沖突

解決hello.txt沖突
git add hello.txt
git commit --no-edit
解決沖突后,添加到index并commit盟庞,第一行顯示 記錄(resolution)吃沪,就是記錄啦本次解決沖突的方式,提交后什猖,merge操作完成

上面輸出顯示票彪,記錄解決辦法,在.git/rr-cache下生成啦postimage

postimage就是我們修改沖突后hello.txt的內(nèi)容不狮,一樣的
$ git log --oneline --all --graph --decorate
查看log,合并后的倉庫分支結(jié)構(gòu)
$ git reset --hard HEAD^
重置掉這次merge操作,HEAD^代表當(dāng)前commit的parent
$ git log --oneline --all --graph --decorate
分支結(jié)構(gòu)又變回來啦

修改morning.txt

修改第一行為((modified test))

將修改的morning提交

$ git add morning.txt 
$ git commit -am '修改morning 第一行為(modified test)'

切換回master

$ git checkout master
image.png

將修改的morning提交

$ git add morning.txt 
$ git commit -am '修改morning 第一行為(modified master)'
$ git log --oneline --all --graph --decorate
分支結(jié)構(gòu)

繼續(xù)將master合并到test

$ git checkout test
$ git merge master
輸出第5行降铸,表示生成‘morning.txt’的preimage,輸出第6行表示用已經(jīng)記錄的解決方式自動解決啦hello.txt的沖突
$ git rerere remaining
輸出顯示摇零,moring.txt還有沖突沒解決

hello.txt的沖突是自動解決的推掸,之前已經(jīng)存儲啦解決方式

hello.txt文件已經(jīng)自動解決啦,把hello.txt添加到index

$ git add hello.txt

如果已經(jīng)在merge之前開啟啦下面的選項,那么自動解決沖突的hello.txt會被自動添加到index,這樣就不用上面的add啦终佛,推薦開啟俊嗽。

$ git config --global rerere.autoupdate true

morning.txt仍然有沖突未解決

沖突的morning.txt文件改成這樣子

提交修改完成merge操作,-a就是自動添加修改過的文件铃彰,--no-edit就是使用默認(rèn)commit message绍豁,不修改

$ git commit -a --no-edit
重點仍然在第一行,記錄用于‘morning .txt’的沖突解決方式

然后牙捉,.git/rr-cache文件夾下就有啦用于解決morning.txt中這個沖突的兩個文件

preimage是沖突之前的樣子

postimage是沖突解決之后的樣子
$ git reset --hard HEAD^
像之前一樣竹揍,重置掉這次merge
$ git log --oneline --all --graph --decorate
分支結(jié)構(gòu)又變回來啦

最后一次在test分支上工作并提交,將test合并到master

修改hello.txt最后一行
$ git commit -am '修改hello.txt第10行為(test10)'
$ git log --oneline --all --graph --decorate
分支結(jié)構(gòu)圖
$ git checkout master
$ git merge test
第5邪铲、6行顯示芬位,兩個文件的沖突都通過之前存儲的方式自動解決啦,而最新修改的第10行是沒有沖突的带到,直接合并昧碉。合并后,直接自動staged啦兩個文件揽惹,因為我們之前開啟啦rerere.autoupdate

下面命令執(zhí)行后被饿,也沒有顯示有剩余的沖突文件,證明merge干凈利落搪搏,雖然輸出結(jié)果最后還是有一句自動合并失敗狭握,直接無視。

git rerere remaining
$ git diff --staged
三個地方的修改都正確合并啦疯溺,一切正常论颅。
$ git commit --no-edit
$ git log --oneline --all --graph --decorate
最終的結(jié)果就是這樣的,歷史記錄非常干凈

rerere的作用就是防止歷史記錄被圖中的control merges給污染掉囱嫩,只有最后一個merge操作

注意事項:

如果最后一次hello.txt修改第2行恃疯,而不是第10行,那么git rerere的自動解決沖突不會生效墨闲,修改的行離第一行太近啦今妄。仍然需要手動解決沖突的

并且,如果morning里面也分別是(test)和(master)


rerere會自動用解決hello.txt中兩個(test) (master)沖突的方法來解決morning文件中的沖突损俭,所以rerere存儲的解決方式是基于沖突的內(nèi)容的,而不是基于沖突文件名中的某個區(qū)域潘酗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杆兵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仔夺,更是在濱河造成了極大的恐慌琐脏,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異日裙,居然都是意外死亡吹艇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門昂拂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來受神,“玉大人,你說我怎么就攤上這事格侯”翘” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵联四,是天一觀的道長撑碴。 經(jīng)常有香客問我,道長朝墩,這世上最難降的妖魔是什么醉拓? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮收苏,結(jié)果婚禮上亿卤,老公的妹妹穿的比我還像新娘。我一直安慰自己倒戏,他們只是感情好怠噪,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杜跷,像睡著了一般傍念。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葛闷,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天憋槐,我揣著相機與錄音,去河邊找鬼淑趾。 笑死阳仔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扣泊。 我是一名探鬼主播近范,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼延蟹!你這毒婦竟也來了评矩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阱飘,失蹤者是張志新(化名)和其女友劉穎斥杜,沒想到半個月后虱颗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蔗喂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年忘渔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缰儿。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡畦粮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出返弹,到底是詐尸還是另有隱情锈玉,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布义起,位于F島的核電站拉背,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏默终。R本人自食惡果不足惜椅棺,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望齐蔽。 院中可真熱鬧两疚,春花似錦、人聲如沸含滴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈况。三九已至勺美,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碑韵,已是汗流浹背赡茸。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祝闻,地道東北人占卧。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像联喘,于是被迫代替她去往敵國和親华蜒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,661評論 9 163
  • 本文為 Git教程的學(xué)習(xí)筆記豁遭,教程源自廖雪峰的博客叭喜。這是一個由淺入深,學(xué)完后能立刻上手的Git教程堤框。另域滥,附上另一本...
    七弦桐語閱讀 6,247評論 5 47
  • 圖文/劉小牙 題目本想寫“嘿启绰,你是我第一面就喜歡的姑娘吖”畢竟最近是只沉迷于勾搭的撩妹懶,然后看看這雙手沟使,才不得不...
    少女哪吒劉懶懶閱讀 452評論 0 6
  • 下午回家委可, 孩子坐副駕駛。 陽光還燦爛腊嗡, 駕駛有些刺眼着倾, 做皺眉狀。 兒子伸手拉下遮陽板燕少, “好些嗎卡者?” “嗯,好...
    千吉change閱讀 273評論 0 0
  • 就是一鳥人 生氣有何用 下次長記性 少理少溝通 善心對善人 啥人啥對應(yīng)
    子木0518閱讀 110評論 0 0