用git rebase修改某次提交

在自己的分支上做

C++
commit 9b74f14a9ab454814baa913d79e6a4fd94507f50 (HEAD -> zhangkang/simplify_llvm, origin/zhangkang/simplify_llvm)
Author: kang.zhang <kang.zhang@csmicro.com>
Date:   Mon May 15 14:02:58 2023 +0800

    working

commit 788fab2564443a7690d8bc63b16ae43327aae9bc
Author: zhangkang <zhangkang@csmicro.net>
Date:   Thu May 11 04:16:30 2023 -0400

    [Feat] Disalbe MicrosoftCXXABI & MicrosoftMangle in AST

commit 6074f4e1614b24e3edc0e7f55111c416d854fb00
Author: zhangkang <zhangkang@csmicro.net>
Date:   Thu May 11 03:57:51 2023 -0400

    [feat] Disable MicrosoftDemangle & MicrosoftDemangleNodes

commit 05e01f95e5e6bdade25b6f820b2f2fddd1a50998
Author: zhangkang <zhangkang@csmicro.net>
Date:   Thu May 11 03:08:15 2023 -0400

    Remove buildin in CGubiltin except amdgpu x86

commit 26831e6bed2c507fe492655c3ab7824c64169afa
Author: zhangkang <zhangkang@csmicro.net>
Date:   Wed May 10 23:48:55 2023 -0400

    [feat] Remove ObjC from clang/lib/CodeGen

    This patch will remove ObjC from clang/lib/CodeGen.

commit ee736ec3ef836733ef5f674cecad3e6a7537ac12
Author: zhangkang <zhangkang@csmicro.net>
Date:   Wed May 10 15:08:07 2023 -0400

    [feat] Remove ObjCRuntime RewriteModernObjC & RewriteObjC

    This patch will remove ObjCRuntime.cpp, RewriteModernObjC.cpp and
    RewriteObjC.cpp

commit 8e7f79f0c38cd3812f7912383259fcb94ddd918b
Author: zhangkang <zhangkang@csmicro.net>
Date:   Wed May 10 14:18:25 2023 -0400

    [Feat] Remove ObjARC analysis passes

    This patch remove ObjARC analysis passes.

commit 75ea670f3742d1ab7908553d1f3be117d51db8b5 (origin/dev, origin/HEAD, dev)
Author: zhangkang <zhangkang@csmicro.net>
Date:   Tue May 9 23:54:28 2023 -0400

    [feat] Remove the library libLLVMObjCARCOpts.a

commit d03d8fddc24d7981cb7baee80fa74af7b814f1fd
Author: zhangkang <zhangkang@csmicro.net>
Date:   Tue May 9 15:04:55 2023 +0800

使用git rebase -i命令

Bash
git rebase -i HEAD~7  // 这里是波浪线,不是减号

以下是7次提交的信息

Bash
pick 8e7f79f0c [Feat] Remove ObjARC analysis passes
pick ee736ec3e [feat] Remove ObjCRuntime RewriteModernObjC & RewriteObjC
pick 26831e6be [feat] Remove ObjC from clang/lib/CodeGen
pick 05e01f95e Remove buildin in CGubiltin except amdgpu x86
pick 6074f4e16 [feat] Disable MicrosoftDemangle & MicrosoftDemangleNodes
pick 788fab256 [Feat] Disalbe MicrosoftCXXABI & MicrosoftMangle in AST
pick 9b74f14a9 working

# 变基 75ea670f3..9b74f14a9 到 05e01f95e(7 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但修改提交说明
# e, edit <提交> = 使用提交,进入 shell 以便进行提交修补
# s, squash <提交> = 使用提交,但融合到前一个提交
# f, fixup <提交> = 类似于 "squash",但丢弃提交说明日志
# x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
# b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
# d, drop <提交> = 删除提交
# l, label <label> = 为当前 HEAD 打上标记
# t, reset <label> = 重置 HEAD 到该标记
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       创建一个合并提交,并使用原始的合并提交说明(如果没有指定
# .       原始提交,使用注释部分的 oneline 作为提交说明)。使用
# .       -c <提交> 可以编辑提交说明。
#
# 可以对这些行重新排序,将从上至下执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#
# 注意空提交已被注释掉

上述第二行中的pick修改为edit,对第二次的提交进行修改

Bash
停止在 ee736ec3e... [feat] Remove ObjCRuntime RewriteModernObjC & RewriteObjC
您现在可以修补这个提交,使用

  git commit --amend

当您对变更感到满意,执行

  git rebase --continue

如果有多个edit的话,每完成一个要使用一次git rebase --continue

修改有问题的文件clang/lib/Driver/ToolChains/Clang.cpp后,查看状态。

Bash
llvm@llvm-gw001m1aftf:~/workspace/OpenCL_Compiler$ git status
交互式变基操作正在进行中;至 75ea670f3
最后的命令已完成(2 条命令被执行):
   pick 8e7f79f0c [Feat] Remove ObjARC analysis passes
   edit ee736ec3e [feat] Remove ObjCRuntime RewriteModernObjC & RewriteObjC
接下来要执行的命令(剩余 5 条命令):
   pick 26831e6be [feat] Remove ObjC from clang/lib/CodeGen
   pick 05e01f95e Remove buildin in CGubiltin except amdgpu x86
  (使用 "git rebase --edit-todo" 来查看和编辑)
您在执行将分支 'zhangkang/simplify_llvm' 变基到 '75ea670f3' 的操作时拆分提交。
  (一旦您工作目录提交干净后,运行 "git rebase --continue"
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
        修改:     clang/lib/Driver/ToolChains/Clang.cpp

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
        test.log
Bash
git add clang/lib/Driver/ToolChains/Clang.cpp
git commit --amend
git rebase --continue
Bash
git push --force  // 提交到 
Bash
 /home/ken/workspace/OpenCL_Compiler/build/bin/clang -cc1 -internal-isystem /home/ken/workspace/OpenCL_Compiler/build/lib/clang/9.0.1/include -nostdsysteminc /home/ken/workspace/OpenCL_Compiler/clang/test/CodeGenOpenCLCXX/addrspace-of-this.cl -triple spir-unknown-unknown -cl-std=clc++ -emit-llvm -pedantic -verify -O0 -o - -DDECL | /home/ken/workspace/OpenCL_Compiler/build/bin/FileCheck /home/ken/workspace/OpenCL_Compiler/clang/test/CodeGenOpenCLCXX/addrspace-of-this.cl --check-prefixes="COMMON,EXPL"