Git如何修改一個過去的Commit


假設我的git log 如下:

commit 5511533dda6fee6982175fafca1f4bd5692e3d9c (HEAD -> trans, origin/trans)
Author: 暮晨 <362864550@qq.com>
Date:   Tue Nov 13 23:57:05 2018 +0800

    EX.is is not what it is

commit eff078c67243a71a5ef645ddadfdaef2f374eff1
Author: 暮晨 <362864550@qq.com>
Date:   Sat Nov 10 23:22:19 2018 +0800

    EX.Time for some hash brownies

commit eb69bff965ee57c5047afc4f615c10462c42566a
Author: 暮晨 <362864550@qq.com>
Date:   Sat Nov 10 17:41:55 2018 +0800

    EX.Strings can be tricky sometimes

我現在需要回到第一個commit eb69bff96 對文件進行修改。

那么需要進行如下操作:

  1. 將當前分支無關的工作狀態進行暫存

     git stash
    
  2. 將HEAD移動到需要修改的commit上

     git rebase eb69bff96^ --interactive
    
  3. 找到需要修改的 commit ,將首行的 pick 改成 edit 后保存

  4. 開始修改文件內容

  5. 將改動文件添加到殘存

     git add
    
  6. 追加改動到提交

     git commit --amend
    
  7. 移動HEAD 回到最新的commit

     git rebase --continue
    
  8. 恢復之前的工作狀態

     git stash pop
    

有什么用

最現實的用處是如果你不小心把密碼等敏感信息上傳了,需要刪掉,但后面又已經有新的commit信息你又不希望丟掉的時候,這個方法就派上用場了。

我的使用場景則是在github上翻譯文檔,希望能保證每個commit都是原文和譯文的對照,方便他人覺得譯文有問題的時候能快速獲取原文。

而譯文的多次修改如果分開提commit的話會讓尋找原文變得很麻煩。

缺點

被修改分支后的所有commit都會被重新提交一遍,此時master分支merge這個分支的話會出現commit重復的問題。所以也只能在沒有其他分支的情況下在主分支干這事。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM