7.6重寫歷史
- 你想修訂提交歷史
- 你可在提交暫存區之前決定哪些檔案歸入哪些提交
- stash決定暫時擱置的工作
- 可重寫已經完成的提交,使其呈現出另一種完成方式
- 這些涉及改變提交次序
- 修改提交中
- 包含的資訊或檔案,壓縮、拆分、完全刪除提交
- 這一切都可以在你尚未同他人共用工作成果之前進行
- 學習到如何完成這些有用的任務
- 以便在與他人共用提交歷史之前能夠將其修改成需要的樣子
7.6.1修改最近一次提交
- 你經常會對最近一次提交做兩件事:
- 修改提交訊息
- 或是修改由於檔案新增、改動、刪除所記錄下的快照。
- 只想修改最近的提交訊息,執行以下命令即可。
git commit --amend
- 這條命令開啟編輯器並在其中顯示最近的提交訊息,以供修改。
我的是直接在git bash裡出來類似vim的東西呦西!
- 編輯器會寫入一個包含已修改資訊的提交,並將其作為你最近的提交
- 如果你已完成提交
- 但提交時忘記加入一個新建立檔案
- 希望能通過新增或更改檔案來修改所提交的快照
- 也可通過類似操作完成
- 你可通過修改檔案來暫存所需改動
- 然後對其用git add,或對一個已跟蹤的檔案使用git rm
- 隨後git commit --amend會獲取你當前的暫存區並將它作為新提交的快照
不要在push到遠端之後還去修改它是這個意思吧!
本大王覺得奇怪的現象
- 比如我這個倉庫本地commit啦!
- 然後push到遠端啦
- 這個時候你在本地想要修改原生的commit內容
- 然後git commit --amend
- 居然還和遠端的分叉了,我草你媽的啥意思啊
- 可是如果我本地改了
- 本地commit了
- 還沒有push到遠端
- 這個時候你可以用git commit --amend修改
- 然後再搞到遠端,就不分叉啦!
7.6.2修改多個提交訊息
- 要修改歷史記錄中較早的提交,須用複雜工具
- Git沒有歷史記錄修改工具
- 但可用變基工具將一系列的提交
- 変基到它們原來所在的HEAD上,
- 而不用移動到新位置
- 藉助互動式的變基工具
- 可在每個想要修改的提交後停下,
- 然後改變提交訊息、新增檔案或是做任何想做的事
- git base的-i
- 可將你帶入変基命令的互動模式
- 須通過告知命令需要變基到哪次提交來表明希望重寫多久遠的提交
- 想改變最近3次或其中任意一次的提交訊息
- 需要將待修改的最近一次提交的父提交作為引數提供給
- git rebase -i,也就是HEAD~2^或HEAD~3
- ~3更易記,
- 你實際上指定了之前4次提交,即要修改提交的父提交