git rebase --skip 会丢弃冲突的commit

来源:https://www.jianshu.com/p/fb1a4e414686

问题描述

今天pull代码,在此之前本地做了一次提交,但是没有push到服务器上去,git pull --reb 后发现报了一个git 错误,于是执行了命令git rebase --skip.

矛盾点

git rebase --skip后发现上次的commit 提交记录不存在了

问题解决

Q1:rebase 的过程是怎样的?
A1:我们知道rebase 的过程首先会产生 rebase 分支(master)的备份,放到(no branch )临时分支中。再将支线分支(branch)的每一次提交修改,以补丁的形式,一个个的重新应用到主干分支上。这个过程是一个循环应用补丁的过程,期间只要补丁产生冲突,就会停止循环,等待手动解决冲突。这个冲突指的是上一个合并后版本与补丁之间的冲突。
git rebase --skip 命令,可以跳过某一次补丁(存在上一轮冲突的解决方案中,已经包含了这一轮的补丁内容,这样会使补丁无效,需要跳过)

Q2:为什么上次的commit 记录就不存在了?
A2:运行git rebase --skip来完全忽略该提交。这样,有问题的提交所引入的变化就不会被添加到历史中。

Q3: 想撤销这个操作怎么办,还想要上次commit 的操作?
A3:

  • 使用git reflog命令找回丢失的commit 信息
  • git checkout -b recovery 5aw24s2 ,这个回到commit时的样子了
  • git checkout master,git merge recovery,再merge回主分支就可以了

反思

今天这个坑了解到了git rebase --skip的一个特点,虽然有解决办法,但这并不是一个好办法。。。
git rebase --skip 这个命令慎用。。。