日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git-重写历史知多少(更改 commit 信息)

發布時間:2024/3/24 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git-重写历史知多少(更改 commit 信息) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經常有以下這些需求:

  • commit 數量比較多,需要合并一些 commit 以保證提交記錄清晰
  • commit 信息寫錯了
  • 這里還分兩種情形,一種是要重寫本地倉庫的 commit。第二種是已經 push commit 到遠程倉庫。

    常見技巧:選擇 push 到遠程倉庫要慎重,需要是你已經有充足的信心及把握提交代碼(而且代碼也是可信任的)。因為一旦提交到遠程,別人從遠程 clone 下來了,這時候你再要去重寫歷史,就需要別人做一些額外的操作才能保持同步。

    舉幾個簡單技巧的實例:

    比如,我們現在有 3 個 commit,信息如下:

    當 commit 還在本地倉庫時

    只想重寫上一個 commit 的信息時

    git commit --amend -m 'feat: add 3 after change'

    執行成功

    請注意,這時候 hash 值已經變化了,commit hash 值由原 ae2a029 => fcfd33c

    批量修改多個 commit 的信息或更改第幾個 commit 時

    舉例:

    當前 master 分支,有 3 個 commit,按照從舊到新分別是 add 1、2、3

    此時,如果你要修改 add 2 和 add 3 的 commit 信息,此時則取出要更改的最早的 commit 的父 commit

    比如,執行

    git rebase -i eb303949e839cbfc1e4ab531e3f33439789369d3

    其中, eb303949e839cbfc1e4ab531e3f33439789369d3 是 commit: add 1 的 hash 值。

    出現文本編輯頁面。注意,此時的 commit 的順序,和正常看的 commit 信息是反的,因為是 rebase 操作,所以要從最早提交的子 commit 開始 rebase,所以這也是為什么反了的原因。

    介紹下常見的名詞解釋:

    pick,使用該 commit 改動和 commit 信息

    reword 使用該 commit 改動,但是可以更改 commit 信息(同 git commit --amend -m 效果),推薦使用這個更改多個 commit 信息,因為比 edit 更少操作步驟

    edit, 使用該 commit 改動,但是可以更改 commit 信息(會在每次要更改 commit 前需要手動執行 git commit --amend)

    squash, 使用該 commit 改動,但是 commit 信息取前一個 commit 信息,也就是將該 commit 和前一個 commit 合并

    你想更改某個 commit 信息

    使用 edit

    比如,你想將 commit: add 2 信息更改成:add 2 after change,那么可以在文本編輯狀態時將 pick 更改成 edit,以下然后輸入 :wq 保存

    此時會出提示

    這時 head 正處于 rebasing 狀態,然后就和上面用 amend 使用是一樣的,輸入

    git commit --amend

    則會出現下面文本提示:

    此時,做出你想要做的 commit 修改,比如將 add 2 改成 add 2 after change 然后輸入 :wq 保存,如下圖

    此時看 git log 可以看到:

    當前 rebase 的 head 的 commit 信息已經被修改。由于還處于 rebasing 狀態,所以我們需要執行:

    git rebase --continue

    此時提示:

    此時,查看 git 歷史,已修改成功,hash 值也都相應更新了:

    使用 reword(推薦)

    輸入 :wq 保存后會立即進入編輯第一個 reword 的 commit 信息的文本編輯狀態,即編輯:feat: add 2 的地方,此時進行文本編輯:feat: add 2 => feat: add 2 after reword

    編輯好 commit 信息后輸入 :wq 保存,此時進入第二個 reword 的 commit 信息的文本編輯狀態,此時進行文本編輯:feat: add 3 => feat: add 3 after reword

    編輯好 commit 信息后輸入 wq 保存,即修改成功

    你想合并某幾個 commit 成一個 commit

    要將最新的 commit 和最新的第二個 commit 信息合并,同理使用 rebase:

    git rebase -i xxx // xxx 為父commit的hash

    此時,將最新的 commit 改成:squash,如下圖:

    按下 wq 進行保存,則進入 commit 信息編輯頁面

    比如,將 commit 信息寫成:feat: add 2 use reword and 3 use reword

    按下 wq 進行保存

    由此看到,commit 已經合并,而且 commit 信息也是 feat: add 2 use reword and 3 use reword

    當 commit 已經 push 到遠程

    如果已經 push 到遠程,則可以本地重寫歷史后,進行一次 push,此時該分支的 head 節點已經改變,建議讓協同者刪除本地分支,拉去你剛剛 push 的分支,再進行后續更改

    更多精彩文章可以看我的博客,如有錯誤,歡迎指正

    總結

    以上是生活随笔為你收集整理的Git-重写历史知多少(更改 commit 信息)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。