修改任意 commit

  目前在公司实习,两周了, 很多东西要学,博客更新慢,敬请见谅!

  上一篇博客中提到了未 push 的 commit 都可以修改, 这一篇就来演示一下。

修改上次提交的 commit

  git 直接提供了修改上次提交的 commit 的选项。

  1. 继续 Hello-World 项目,上次 README 经过两次提交, 变成了这个样子:


  2. 现在我想修改第2个commit,把 new line 变成 add new line:


  3. 我就直接把 new line 改成 add new line 然后点击保存; 接着我打开 Git Gui,选中"修正上次提交", 然后 缓存、提交:


  4. 最后,看一下版本历史图,master 分支依旧是两个 commit:


  可以看到,修改上次提交的 commit 除了选中"修改上次提交", 别的步骤跟提交一个新的 commit 是一样的, 而且既可以修改一个 commit 的变更, 也可以修改它的提交描述。

修改任意一个 commit

  修改任意一个 commit, git 没有直接提供这样的功能(如果你发现了, 一定要告诉我喔^_^),我是通过 rebase 和 修改上次提交 来实现的。

  1. 假设目标还是把 new line 修改为 add new line, 但是,我已经做了一次新的提交(第3个commit):


  2. 我想在不丢弃第3个 commit 的同时修改第2个 commit, 下面我就开始一步步操作了,首先, 我 checkout 一个新分支 fix:


  3. 然后将 fix 分支 reset 到要修改的第2个分支:


  4. 然后修改上次提交的 commit, 将 new line 改成 add new line:


  5. 虽然修改了第2个commit,但这只是 fix 分支的改动, master 的第2个commit并没有被修改(别急,还没完呢):


  6. 这一步先切换到 master 分支, 然后 rebase 合并 fix 分支:


      请注意:这一次合并并不顺利, 发生了合并冲突。冲突是怎么发生的呢?
      master 的第2个 commit 在第2行添加了一句"new line", 而 fix 的第2个 commit 却在第2行添加了一句"add new line", 要将这两个 commit 合并起来有多种可行方案:

    • 方案一:两者都保留,fix 在前

      Hello World!
      add new line
      new line
      
    • 方案二:两者都保留,fix 在后

      Hello World!
      new line
      add new line
      
    • 方案三:保留 fix

      Hello World!
      add new line
      
    • 方案四:保留 master

      Hello World!
      new line
      

      git 不知道我们到底想要哪种方案, 它也不敢擅自做主(否则会留下隐患), 所以它就告诉我们 Merge conflict, 在此时的 README 中,我们能看到 git 正在纠结的地方:


  7. 冲突并不可怕,事实上这次冲突正是我所期待的, 因为我需要 git 解决冲突的一种方式——skip 来丢弃 旧的 test commit(也就是 master 的第2个 commit):


  8. 这样,master 分支的第2个 commit 就像是被修改了一样 (实际上是用上了新的抛弃了旧的):


    fix 分支现在就可以删掉了, 虽然在这一过程中它功不可没O(∩_∩)O~。

关于解决冲突的更全面的介绍后续文章再给出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值