7.6重寫歷史
- 你想修訂提交歷史
- 你可在提交暫存區以前決定哪些文件納入哪些提交
- stash決定暫時擱置的工做
- 可重寫已經完成的提交,使其呈現出另外一種完成方式
- 這些涉及改變提交次序
- 修改提交中
- 包含的信息或文件,壓縮、拆分、徹底刪除提交
- 這一切均可以在你還沒有同他人共享工做成果以前進行
- 學習到如何完成這些有用的任務
- 以便在與他人共享提交歷史以前可以將其修改爲須要的樣子
7.6.1修改最近一次提交
- 你常常會對最近一次提交作兩件事:
- 修改提交消息
- 或是修改因爲文件添加、改動、刪除所記錄下的快照。
- 只想修改最近的提交消息,執行如下命令便可。
git commit --amendgit
- 這條命令打開編輯器並在其中顯示最近的提交消息,以供修改。
- 保存並關『閉編輯器後】
個人是直接在git bash裏出來相似vim的東西呦西!vim
- 編輯器會寫入一個包含已修改信息的提交,並將其做爲你最近的提交
- 若是你已完成提交
- 但提交時忘記加入一個新建立文件
- 但願能經過添加或更改文件來修改所提交的快照
- 也可經過相似操做完成
- 你可經過修改文件來暫存所需改動
- 而後對其用git add,或對一個已跟蹤的文件使用git rm
- 隨後git commit --amend會獲取你當前的暫存區並將它做爲新提交的快照
- 當心用這種用法
- 修正會改變提交的SHA-1值
- 像是一次微型變基
- 不要在已經推送了最近一次提交以後還去修正它
不要在push到遠程以後還去修改它是這個意思吧!bash
本大王以爲奇怪的現象
- 好比我這個倉庫本地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更易記,
- 要修改的是最近3次提交
- 須要將待修改的最近一次提交的父提交做爲參數提供給
- 你實際上指定了以前4次提交,即要修改提交的父提交