Git: 解决掉远程分支中的 Merge branch... 提交记录

文章目录

  • Git 解决掉远程分支中的 Merge branch... 提交记录
    • 实际操作
      • 情况一
      • 情况二
  • 总结

Git 解决掉远程分支中的 Merge branch… 提交记录

原理:采用一个新的分支使用 reset --hard 回退版本,回退之后使用 cherry-pick 将源分支 Commit 应用到修改分支,创建一个新的 Commit 取而代之
合并完成之后返回源分支 rebase 合并分支,源分支合并完成之后推送到远程,完成修改 

知道了原理,现在我们来实际操作一下

实际操作

情况一

远程分支现在有这样一个提交日志,我们想要删除 b6c6ee5 又想要保存修改的内容

b6c6ee5 (HEAD -> master) Merge branch 'master' xxx
9189e06 第三次提交
0d6ea9f (origin/master) update test.txt.
a6c479f update test.txt.
04e0fd8 第二次提交
ef901f6 第一次提交

Git: 解决掉远程分支中的 Merge branch... 提交记录_第1张图片

我们新建一个修复分支用来进行修复这条不太好看的提交记录

git branch fix		# 新建修复分支
git checkout fix	# 切换到修复分支
git reset --hard 9189e06	# 回滚到第三次提交
HEAD 现在位于 9189e06 第三次提交
git cherry-pick 0d6ea9f		# 将源分支应用到修复分支,可能需要解决冲突

Git: 解决掉远程分支中的 Merge branch... 提交记录_第2张图片

解决一下冲突

Git: 解决掉远程分支中的 Merge branch... 提交记录_第3张图片Git: 解决掉远程分支中的 Merge branch... 提交记录_第4张图片
Git: 解决掉远程分支中的 Merge branch... 提交记录_第5张图片

解决完之后我们再次查看一下 git log,可以发现 Merge branch xxx的提交信息没有了,取而代之的是 f90b222,同时我们以前的提交也是存在的,然后我们合并一下修复分支

git log
f90b222 (HEAD -> fix) update test.txt
9189e06 第三次提交
a6c479f update test.txt.
04e0fd8 第二次提交
ef901f6 第一次提交
git checkout master		# 切换分支
git rebase fix 			# 合并分支
git rebase --skip
git push -f		# 强制推送分支,因为我们落后远程分支的版本,所以需要强制推送

之后我们再查看远程分支,也没有了 Merge branch xxx 的提交信息

Git: 解决掉远程分支中的 Merge branch... 提交记录_第6张图片

情况二

远程分支的提交记录是这样的,我们想要删除 460943d 这个合并提交

112c907 (HEAD -> master, origin/master) 第七次提交
befef8f 第六次提交
460943d Merge branch 'master' of xxxx
2393be2 第五次提交
e1d66e4 update test2.txt.
f6be66e add test2.txt.

Git: 解决掉远程分支中的 Merge branch... 提交记录_第7张图片

部分操作和情况一是一样的,我们同样也是新建一个修复分支(fix),然后进行 git reset --hard 回滚之后 git cherry-pick 应用部分提交,下面是具体操作

git branch fix	# 新建修复分支
git checkout fix	# 切换修复分支
git reset --hard 2393be2	# 回滚到 Merge branch 提交的前一条 Commit
git cherry-pick 112c907 befef8f # 对 112c907-befef8f 区间的提交进行合并

git cherry-pick 之后可能需要解决部分冲突,这里就不做详细说明如何去解决冲突了, 合并完成后我们再次查看 git log

git log
78c5e94 (HEAD -> fix) 第七次提交
44ae33d 第六次提交
2393be2 第五次提交
f6be66e add test2.txt.

这里值得注意的是:原先的 Commit 已经被修改了!取而代之的是我们新的提交

这就是为什么我们能删除掉 Merge branch 的原因, 所以使用这个方法去删除提交记录,会修改远程提交的提交记录.

修复完毕后我们切换分支进行合并推送到远程

git checkout master
git rebase fix
git rebase --skip
git push -f

Git: 解决掉远程分支中的 Merge branch... 提交记录_第8张图片

总结

使用该方法清除提交记录信息会导致提交后的 Commit 发生改变,同时需要手动处理冲突.
博主作为一个 Git 小白,此方法只是自己摸索出来的一种办法,如果您有更好的建议欢迎讨论!
最后,希望能够帮助到你.

你可能感兴趣的:(Github,Git,git,github)