Git提交歷史的修改刪除合併

歡迎訪問個人我的博客git

前言

假如,當前咱們處在需求分支feature-test,進行了屢次說起,git log查看commit信息以下:shell

git log

每個提交的commit都是獨立的,可是最近三個commit都是相關的,都是添加read.txt文件內容,在本文中以此爲實例依次介紹如何修改,合併,回退commit的。安全

查看git歷史

若是要查看git歷史可使用git loggit reflog指令:命令行

  1. git log:查看當前分支的存在提交歷史記錄,不包括諸如刪除的或被合併的提交;
  2. git reflog:查看當前分支全部操做歷史,諸如歷史提交記錄,撤銷,合併提交等詳細歷史記錄;

git rebase -i

須要用到的指令是git rebase -i commitHashcommitHash是commitID,是須要合併的commit的前一個commit節點的ID,對於本文實例中而言,是最近第四個提交df11bf944,因此執行以下指令:code

git rebase -i df11bf944

命令行終端會輸出以下內容:blog

git-rebase-i

由遠及近列出了咱們指望處理的三個提交,前面pick表明的默認使用該提交commit,咱們如今能夠按i進入編輯模式,修改該字段值,值能夠如圖中描述,常常使用的以下:索引

  1. pick:簡寫p,啓用該commit;
  2. reword:簡寫r,使用該commit,可是修改提交信息,修改後能夠繼續編輯後面的提交信息;
  3. edit:簡寫e,使用commit,中止合併該commit;
  4. squash:簡寫s,使用該commit,並將該commit併入前一commit;
  5. drop:簡寫d,移除該commit;

修改提交信息

咱們如今嘗試修改最近一次的提交commit信息,將其前面pick修改爲rewordget

reword

編輯後,按esc鍵退出編輯模式,而後輸入:wq,保存當前編輯,會輸出以下內容:博客

reword info

咱們能夠開始編輯咱們須要修改的commit信息了,按i鍵進入編輯模式,修改提交信息爲:it

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

保存退出後會有修改爲功提示:

commit

合併歷史提交

前面修改commit成功,若是指望將多個提交合併成一個提交,使得整個提交歷史更乾淨,如何處理呢?

執行以下指令,df11bf944是須要合併的提交的前一個提交節點的commitID:

git rebase -i df11bf944

而後修改pick值爲squash

git-rebase -i & squash

保存退出,會進入最終合併提交commit信息編輯狀態,在這裏會列出合併commit的全部message,咱們能夠操做:

modify last comibination message

咱們能夠同時保留三次的提交信息,也能夠任意修改,此處咱們只保留第一個提交的信息,而後保存退出,當咱們再次使用git log查看歷史提交信息時,就會發現只剩下合併後的一個提交及以前未操做的提交:

git-log-2

git rebase -i head~{num}

前面提到的git rebase -i commitHash指令能夠合併提交歷史,其實還能夠換成一種快捷方式,如當須要合併最近兩個提交時,執行:

git rebase -i head~2

效果同樣:

git rebase -i head~2

後續修改,合併,回退操做均一致。

撤銷提交

當需求發現變動,咱們發現不須要某一歷史提交時,怎麼辦呢,怎麼放棄該修改提交?這也分兩種狀況:

  1. 歷史提交中間某提交的撤銷;
  2. 最近提交的撤銷;

撤銷中間提交

當須要放棄的提交被合併後,咱們想放棄該提交,須要先查看該提交的信息使用,執行指令:

git reflog

該指令輸出詳細的操做歷史,包括提交,操做,修改等:

git reflog

咱們找到須要撤銷的提交,如最近第二個提交,提交commitId爲dcbdde2,索引爲HEAD@{19}

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

git revert

執行如下指令撤銷該commit:

git revert head@{19}

git revert head@{19}

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

git revert dcbdde2

git revert撤銷一個提交的同時會建立一個新的提交。這是一個安全的方法,由於它不會重寫提交歷史。它會建立一個新的提交來撤銷指定更改,而後把新提交加入至項目中。

撤銷提交時若多個提交修改了同一文件可能會出現衝突,須要處理衝突後,暫存:

git add .

而後繼續執行revert操做:

git revert --continue

git-revert —continue

而後查看提交歷史,發現多了一個記錄:

git-log-3

此時已經撤銷了以前最近第二次提交的內容(即撤銷了read.txt文件第二行)。

撤銷最近提交

若是指望撤銷的提交是最近獨立存在的,並無發生合併,以撤銷上一節git revert新生成的提交爲例:

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

git reset

只須要使用git reset指令:

git reset commitHash / head~{num}

commitHash是指望撤銷提交的上一次提交的commitID,等效於指按期望撤銷最近幾回提交,num值等於指望撤銷提交數。

具體提交的commitID可使用git loggit reflog指令查找,刪除執行指令:

git reset head~1

等效於,df11bf9是須要撤銷提交commit的上一次提交commitID:

git reset df11bf9

最後會發現提交內容變成未提交,使用git checkout.指令撤銷變動就行:

git reset

相關文章
相關標籤/搜索