GIT 修改已经PUSH到远程仓库的提交(commit)

刷了很多GIT修改已经提交的commit的文章(包括commit的文件和commit的 message),试了几个没有太合适的。

背景如下:

      代码有很多次提交,已经push到远程仓库,但是中间有几个commit违反了规定,需要修改(或者删除,新增)一些提交内容。当然这个需求确实比较不太合乎情理,版本管理的目的也是为了保留提交的历史,对历史进行修改是不太合法的操作。

前提:

有远程仓库的管理权限,可以强制push(git push -f) .嗯 这个也是一个不安去的操作。

1 创建模拟场景

新建仓库,clone到本地

第一个commit:(假设commitid= xx1)

             创建两个目录 a b,a下新建文件 a.txt, b下新建文件 b.txt

第二个commit    (假设commitid= xx2)

            修改 a/a.txt  

 第三个commit    (假设commitid= xx3)

          修改  b/b.txt  

第四个 commit      (假设commitid= xx4)

         同时修改  a/a.txt  b/b.txt

2 假设需要删除 第一次提交中的 整个b目录

操作步骤

  1. git rebase -i   xx1~  (波浪号 键盘组合键  shit +1,波浪号的作用是rebase 从此commitid 开始进行rebase,否则从指定commitid 的下一个commitid进行rebase)
  2. 进入vi编辑模式,修改所有相关的commit id 的命令为 edit,wq保存(vi 命令)

GIT 修改已经PUSH到远程仓库的提交(commit)

           3  通过操作系统命令删除 b目录 (同样 删除 修改操作均可以,但是修改要注意会不会和后面的提交有冲突)

           4 添加到暂存区 git add .

          5  提交修改 git commit --amend 

          6 git rebase --continue 继续进行rebase。 注意我们整个场景,因为后面的commit 也对b进行的修改,每次rebae continue之后都要看是否存在b 如果存在 重复 3-5的步骤,如果没有继续进行git rebase --continue

 

7 rebase 结束之后,命令行会有提示,git push -f 覆盖远程分支即可