【讲清楚】rebase的使用
Git rebase
?git original log:
?
目前有多于三個的log,而我想要合并最近的兩個 log, 也就是上圖中紫色的圈和黃色的圈,所以這個時候使用rebase的方式如下:
git? ? rebase? ?-i? ?ee9ee598ea2a4bece9b23
注意這個時候的應該使用的log的編碼是紅色的圈,雖然我想要合并紫色和黃色,但是需要在紅色圈的基礎上進行合并,所以需要填入ee9ee598
?填完之后,需要對log進行重新選擇,
pick?82b5047??Changes?for?MapLoad?(changed?InitKeyFrame?for?EUCM?based?on?ORI_Ver) pick?eddaa2b??Load?Map? #?Rebase?a71eba2..e1a7dfa?onto?a71eba2 #?Commands: #??p,?pick?=?use?commit #??r,?reword?=?use?commit,?but?edit?the?commit?message #??e,?edit?=?use?commit,?but?stop?for?amending #??s,?squash?=?use?commit,?but?meld?into?previous?commit #??f,?fixup?=?like?"squash",?but?discard?this?commit's?log?message #??x,?exec?=?run?command?(the?rest?of?the?line)?using?shell # #?These?lines?can?be?re-ordered;?they?are?executed?from?top?to?bottom. # #?If?you?remove?a?line?here?THAT?COMMIT?WILL?BE?LOST. # #?However,?if?you?remove?everything,?the?rebase?will?be?aborted. # #?Note?that?empty?commits?are?commented?out這個文件中的log是按照提交的時間順序來的,提交的時間最早的log,就會在?出現在 最上面,這樣給了我們更清楚的知識,究竟保留哪個,去掉哪個?
pick即為保留的意思,如果pick某個hash,那個這一次提交的代碼修改將會被保存;
squash表示那一次的提交內容將會和它的上一個log合并到一起;squash很適用于那種commit完成后發現自己沒有add全的情況;
reword表示當前的commit記錄會被保留,但是允許你修改commit的comment,使用與commit -m ”“ 時寫錯log的情況;
fixup就更徹底了,會將當前的提交代碼與上一次的提交合并到一起,同時直接刪除掉當前的log message,跟在下面圖2的文件中注釋掉其實是一樣的效果;
一般情況下,squash是最常用的,即保留文件中的修改和commit的提交,只是將這次的commit與上一次的合并而已,所以需要將上述文件修改成:
pick?82b5047??Changes?for?MapLoad?(changed?InitKeyFrame?for?EUCM?based?on?ORI_Ver) s?eddaa2b??Load?Map?然后ctrl+x 離開,其中會提示是否需要保存,選擇YES即可;
然后會遇到如下文件:
?
這個文件主要是需要選擇新的commit 的comment,也就是log message內容,如果不想要什么可以直接用#把他們注釋掉,
因為我合并和紫色和黃色的兩個圈圈log,并且覺得黃色圈圈的log內容更加準確,所以,就選擇留下第三行的文字;
那么最后合并后的log內容為
?
從如上的合并可以看出,紅色的圈圈沒變,但是紫色圈圈和黃色圈圈都不存在了,而合并成立綠色圈圈,同時綠色圈圈的commit 內容選用了紫色圈圈的內容;
更多理論參考:
https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA
總結
以上是生活随笔為你收集整理的【讲清楚】rebase的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何免费将caj转换成PDF,支持批量且
- 下一篇: c语言中文定义什么类型,typedef在