zoukankan      html  css  js  c++  java
  • 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重复的问题。所以也只能在没有其他分支的情况下在主分支干这事。

  • 相关阅读:
    1864: [Zjoi2006]三色二叉树
    3611: [Heoi2014]大工程
    2286: [Sdoi2011]消耗战
    2298: [HAOI2011]problem a
    2037: [Sdoi2008]Sue的小球
    P4512 【模板】多项式除法
    P4238 【模板】多项式求逆
    3771: Triple
    P3365 改造二叉树
    1191: [HNOI2006]超级英雄Hero
  • 原文地址:https://www.cnblogs.com/leisurelylicht/p/ru-he-xiu-gai-yi-ge-guo-qu-deCommit.html
Copyright © 2011-2022 走看看