Git提交歷史的修改刪除合并等實踐

Git提交歷史的修改刪除合并等實踐(轉(zhuǎn))
今天主要針對在項目版本控制器Git的使用中遇到的一些和提交歷史操作相關(guān)的常見問題器钟,進(jìn)行實踐總結(jié)降盹。在項目開發(fā)中經(jīng)常會需要修改提交commit信息,合并多個提交commit打掘,甚至放棄當(dāng)前修改回退至某一歷史提交的需求菱农,那我們到底該如何操作呢,本篇一一闡述拆火。

1?前言

2?查看git歷史

3?git rebase -i

4?修改提交信息

5?合并歷史提交

5.1?git rebase -i head~{num}

6?撤銷提交

6.1?撤銷中間提交

6.1.1?git revert

6.2?撤銷最近提交

6.2.1?git reset

前言

假如,當(dāng)前我們處在需求分支feature-test,進(jìn)行了多次提及们镜,git log查看commit信息如下:

每一個提交的commit都是獨立的币叹,但是最近三個commit都是相關(guān)的,都是添加read.txt文件內(nèi)容憎账,在本文中以此為實例依次介紹如何修改套硼,合并卡辰,回退commit的胞皱。

查看git歷史

如果要查看git歷史可以使用git log或git reflog指令:

git log:查看當(dāng)前分支的存在提交歷史記錄,不包括諸如刪除的或被合并的提交九妈;

git reflog:查看當(dāng)前分支所有操作歷史反砌,諸如歷史提交記錄,撤銷萌朱,合并提交等詳細(xì)歷史記錄宴树;

git rebase -i

需要用到的指令是git rebase -i commitHash,commitHash是commitID晶疼,是需要合并的commit的前一個commit節(jié)點的ID酒贬,對于本文實例中而言,是最近第四個提交df11bf944翠霍,所以執(zhí)行如下指令:

gitrebase -i df11bf944

命令行終端會輸出如下內(nèi)容:

由遠(yuǎn)及近列出了我們期望處理的三個提交锭吨,前面pick代表的默認(rèn)使用該提交commit,我們現(xiàn)在可以按i進(jìn)入編輯模式寒匙,修改該字段值零如,值可以如圖中描述,經(jīng)常使用的如下:

pick:簡寫p锄弱,啟用該commit考蕾;

reword:簡寫r,使用該commit会宪,但是修改提交信息肖卧,修改后可以繼續(xù)編輯后面的提交信息;

edit:簡寫e掸鹅,使用commit塞帐,停止合并該commit;

squash:簡寫s河劝,使用該commit壁榕,并將該commit并入前一commit;

drop:簡寫d赎瞎,移除該commit牌里;

修改提交信息

我們現(xiàn)在嘗試修改最近一次的提交commit信息,將其前面pick修改成reword:

編輯后,按esc鍵退出編輯模式牡辽,然后輸入:wq喳篇,保存當(dāng)前編輯,會輸出如下內(nèi)容:

我們可以開始編輯我們需要修改的commit信息了态辛,按i鍵進(jìn)入編輯模式麸澜,修改提交信息為:

feature(read.txt) 添加read.txt第三行(reword修改commitmessage)

保存退出后會有修改成功提示:

合并歷史提交

前面修改commit成功,如果期望將多個提交合并成一個提交奏黑,使得整個提交歷史更干凈炊邦,如何處理呢?

執(zhí)行如下指令熟史,df11bf944是需要合并的提交的前一個提交節(jié)點的commitID:

gitrebase -i df11bf944

然后修改pick值為squash:

保存退出馁害,會進(jìn)入最終合并提交commit信息編輯狀態(tài),在這里會列出合并commit的所有message蹂匹,我們可以操作:

我們可以同時保留三次的提交信息碘菜,也可以任意修改,此處我們只保留第一個提交的信息限寞,然后保存退出忍啸,當(dāng)我們再次使用git log查看歷史提交信息時,就會發(fā)現(xiàn)只剩下合并后的一個提交及之前未操作的提交:

git rebase -i head~{num}

前面提到的git rebase -i commitHash指令可以合并提交歷史履植,其實還可以換成一種快捷方式计雌,如當(dāng)需要合并最近兩個提交時,執(zhí)行:

gitrebase -i head~2

效果一樣:

后續(xù)修改静尼,合并白粉,回退操作均一致。

撤銷提交

當(dāng)需求發(fā)現(xiàn)變更鼠渺,我們發(fā)現(xiàn)不需要某一歷史提交時鸭巴,怎么辦呢,怎么放棄該修改提交拦盹?這也分兩種情況:

歷史提交中間某提交的撤銷鹃祖;

最近提交的撤銷;

撤銷中間提交

當(dāng)需要放棄的提交被合并后普舆,我們想放棄該提交恬口,需要先查看該提交的信息使用,執(zhí)行指令:

gitreflog

該指令輸出詳細(xì)的操作歷史沼侣,包括提交祖能,操作,修改等:

我們找到需要撤銷的提交蛾洛,如最近第二個提交,提交commitId為dcbdde2养铸,索引為HEAD@{19}:

dcbdde2HEAD@{19}:commit:feature(read.txt): 添加read.txt第二行

GIT REVERT

執(zhí)行以下指令撤銷該commit:

gitreverthead@{19}

上面head@{19}指令也等效于:

gitrevert dcbdde2

git revert撤銷一個提交的同時會創(chuàng)建一個新的提交雁芙。這是一個安全的方法,因為它不會重寫提交歷史钞螟。它會創(chuàng)建一個新的提交來撤銷指定更改兔甘,然后把新提交加入至項目中。

撤銷提交時若多個提交修改了同一文件可能會出現(xiàn)沖突鳞滨,需要處理沖突后洞焙,暫存:

gitadd.

然后繼續(xù)執(zhí)行revert操作:

git revert --continue

然后查看提交歷史,發(fā)現(xiàn)多了一個記錄:

此時已經(jīng)撤銷了之前最近第二次提交的內(nèi)容(即撤銷了read.txt文件第二行)拯啦。

撤銷最近提交

如果期望撤銷的提交是最近獨立存在的澡匪,并沒有發(fā)生合并,以撤銷上一節(jié)git revert新生成的提交為例:

5a7b985 Revert"feature(read.txt): 添加read.txt第二行"df11bf9 commit:"feat(RN-publish-up): React Native發(fā)布提岔,熱更新原理介紹"

GIT RESET

只需要使用git reset指令:

gitresetcommitHash /head~{num}

commitHash是期望撤銷提交的上一次提交的commitID仙蛉,等效于指定期望撤銷最近幾次提交笋敞,num值等于期望撤銷提交數(shù)碱蒙。

具體提交的commitID可以使用git log或git reflog指令查找,刪除執(zhí)行指令:

gitresethead~1

等效于夯巷,df11bf9是需要撤銷提交commit的上一次提交commitID:

gitresetdf11bf9

最后會發(fā)現(xiàn)提交內(nèi)容變成未提交赛惩,使用git checkout.指令撤銷變更就行:

轉(zhuǎn)載自?熊建剛的博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市趁餐,隨后出現(xiàn)的幾起案子喷兼,更是在濱河造成了極大的恐慌,老刑警劉巖后雷,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件季惯,死亡現(xiàn)場離奇詭異,居然都是意外死亡臀突,警方通過查閱死者的電腦和手機勉抓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來候学,“玉大人藕筋,你說我怎么就攤上這事∈崧耄” “怎么了隐圾?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掰茶。 經(jīng)常有香客問我暇藏,道長,這世上最難降的妖魔是什么濒蒋? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任盐碱,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甸各。我一直安慰自己垛贤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布趣倾。 她就那樣靜靜地躺著聘惦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪儒恋。 梳的紋絲不亂的頭發(fā)上善绎,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音诫尽,去河邊找鬼禀酱。 笑死,一個胖子當(dāng)著我的面吹牛牧嫉,可吹牛的內(nèi)容都是我干的剂跟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酣藻,長吁一口氣:“原來是場噩夢啊……” “哼曹洽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辽剧,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤送淆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后怕轿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷崩,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年撞羽,在試婚紗的時候發(fā)現(xiàn)自己被綠了阐斜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡放吩,死狀恐怖智听,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渡紫,我是刑警寧澤到推,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站惕澎,受9級特大地震影響莉测,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唧喉,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一捣卤、第九天 我趴在偏房一處隱蔽的房頂上張望忍抽。 院中可真熱鬧,春花似錦董朝、人聲如沸鸠项。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祟绊。三九已至,卻和暖如春哥捕,著一層夾襖步出監(jiān)牢的瞬間牧抽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工遥赚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扬舒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓凫佛,卻偏偏與公主長得像讲坎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子御蒲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354