7 :git tool

2020-10-28 20:00:59

7.6重寫歷史

  • 你想修訂提交歷史
  • 你可在提交暫存區之前決定哪些檔案歸入哪些提交
    • stash決定暫時擱置的工作
    • 可重寫已經完成的提交,使其呈現出另一種完成方式
  • 這些涉及改變提交次序
    • 修改提交中
    • 包含的資訊或檔案,壓縮、拆分、完全刪除提交
    • 這一切都可以在你尚未同他人共用工作成果之前進行

  • 學習到如何完成這些有用的任務
    • 以便在與他人共用提交歷史之前能夠將其修改成需要的樣子

7.6.1修改最近一次提交

  • 你經常會對最近一次提交做兩件事:
    • 修改提交訊息
    • 或是修改由於檔案新增、改動、刪除所記錄下的快照。
  • 只想修改最近的提交訊息,執行以下命令即可。

git commit --amend

  • 這條命令開啟編輯器並在其中顯示最近的提交訊息,以供修改。
    • 儲存並關『閉編輯器後】

我的是直接在git bash裡出來類似vim的東西呦西!

  • 編輯器會寫入一個包含已修改資訊的提交,並將其作為你最近的提交

  • 如果你已完成提交
    • 但提交時忘記加入一個新建立檔案
    • 希望能通過新增或更改檔案來修改所提交的快照
    • 也可通過類似操作完成
  • 你可通過修改檔案來暫存所需改動
    • 然後對其用git add,或對一個已跟蹤的檔案使用git rm
    • 隨後git commit --amend會獲取你當前的暫存區並將它作為新提交的快照

  • 小心用這種用法
    • 修正會改變提交的SHA-1值
  • 像是一次微型變基
    • 不要在已經推播了最近一次提交之後還去修正它

不要在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更易記,
        • 要修改的是最近3次提交
  • 你實際上指定了之前4次提交,即要修改提交的父提交