reset 操作实践

通过git log可以查看commit记录,我们可以对指定的commit版本进行回退操作

  1. // 回退到指定的提交版本
  2. git reset commit-sha
  3. // 默认为mixed模式,指的是保留更改,只是将commit与index回到指定版本
  4. // 使用soft,则是指保留更改,将commit回退到指定版本,index不变
  5. // 如无需保留更改,可使用--hard指令,将不保留更改,commit与index都将回退
  6. git reset --hard commit-sha

本地回退版本后,如远程的分支高与回退后的本地分支,提交将会报错
image.png

这时候需要强制推送才能推送成功,注意:一旦强制推送成功,将会丢失原来的远程分支内容,而替换称你强制推送的分支内容

  1. // 通过添加指令 --force 完成强制推送
  2. git push --force

image.png

而如果在你强制推送之前,别的同事或者生产环境已经同步了远程分支的内容,那么在你强制推送后,他们的本地代码将无法通过git pull同步远程分支,因为他们的分支高于远程分支,如需强制同步远程分支到他们的本地代码,可使用一下操作

  1. # 这里以master分支为例
  2. git fetch --all
  3. git reset --hard origin/master
  4. git pull
  5. # 注意,使用以上操作,你的本地更改将会丢失,远程分支会强制替换本地分支

问:那么我们该如何回退远程分支代码,但又能让同事通过git pull同步远程分支呢?

revert操作实践

当我们想要回退,但是不想要删除过去提交的记录,我们就可以使用revert操作了,具体是用如下

  1. git revert commit-sha

执行revert操作后,将会生成一条新的commit记录,这条记录可以告诉同事该记录用于回退版本,而同事可直接使用git pull 同步远程分支。