git --重命名commit汇总

作者:opLW

目录

1. 重命名最新commit
2. 重命名历史commit
3. 重命名根节点commit
4. 总结

  • 情景如下图所示,我们要将所有commit信息用英文表示并将Initial commit改为zero
    在这里插入图片描述

    此时HEAD在master最新commit,即黄色节点

1. 重命名最新commit

  • 概述 重命名分支最新commit,主要使用到git commit --amend -m 'new_message'命令。
  • 步骤
    • 对于分支最新commit,我们使用git commit --amend -m 'two'重命名。
    • 除了master分支有最新commit外,test分支也有最新commit。因此使用git checkout test切换到该分支。
    • 位于test分支后使用git commit --amend -m 'one-two'重命名test分支最新commit。
  • 结果 此时两个分支的最新commit都已经修改完毕。
    在这里插入图片描述
    注意git commit --amend -m 'new_message'命令相当于撤销之前的提交,然后携带新的信息进行一次新的提交,所以重命名后,该节点的id会发生变化。

2. 重命名历史commit

  • 概述 重命名历史commit相对比较复杂,需要配合rebase相关命令:git rebase -i parent_commit_id
    • 其中parent_commit_id为需要重命名commit的父亲节点的id。如此情景中我们修改1,因此需要其父亲commitInitial commit的id。
    • 注意:修改分支历史commit的信息,需要先切换至该分支。
  • 步骤 经过前面的操作,当前在test分支。
    • 首先通过git log --oneline --all --graph查看Initial commit的id。如下图所示为d1a0b5e
      git --重命名commit汇总_第1张图片
    • 使用命令git rebase -i d1a0b5e,进入如下页面git --重命名commit汇总_第2张图片
      其中红色部分为当前待执行的命令,黄色部分为可供选择的命令,因为我们要修改11-1的commit信息,所以需要使用紫色线对应的命令reword
    • 使用reword修改上面的文件,修改并保存。git --重命名commit汇总_第3张图片
    • 由于新的文件中需要对两条commit进行重命名,所以系统弹出如下界面供用户输入新的信息。git --重命名commit汇总_第4张图片
      我们将1修改为one并保存。红色部分表明此时在执行reword c6b6d01 1,还有reword 06a51af 1-1待处理。所以保存好这次的修改后,系统会弹出第二个修改页面,同理进行修改即可。
  • 结果
    git --重命名commit汇总_第5张图片
    奇怪的是产生了一个新的commit: one而原来的1还在。我们看下最新的日志git --重命名commit汇总_第6张图片
    可以发现在test分支中Initial commit以上的commit的id都发生了变化,这也是reabse的一个缺点。

3. 重命名根节点commit

  • 概述 前一小节中,重命名历史commit需要父亲commit的id,那没有父亲commit的节点怎么办?对于没有父亲commit的节点如Initial commit,则使用命令git rebase -i --root
  • 步骤 目前已经切换至master分支。
    • 使用git rebase -i --root 命令,其中--root代替parent_commit_id
    • 执行类似前一小节的操作。
  • 结果
    git --重命名commit汇总_第7张图片
    前一小节中,两条分支以Initial commit为基准点分成两条分支。而这里由于对根commit进行rebase操作,所以整个树变为完全不相干的两条独立分支。我们看下最新的日志
    git --重命名commit汇总_第8张图片
    可以发现所有commit_id几乎都发生了变化,这也是rebase的缺点。
  • 参考文章 Edit the root commit in Git?

4. 总结

  • 注意 上述重命名commit的方式都会导致commit的id发生变化,甚至导致树的结构发生变化。
    • 所以如果我们是和其他人合作开发的,那么重命名之前最好进行商榷。否则commit的id发生变化,会导致一些列不必要的麻烦。
    • 或者只在个人分支进行修改。
  • 可能感兴趣的问答:How to modify existing, unpushed commit messages?

万水千山总是情,麻烦手下别留情。
如若讲得有不妥,文末留言告知我,
如若觉得还可以,收藏点赞要一起。

你可能感兴趣的:(Git)