reset 操作实践
通过git log可以查看commit记录,我们可以对指定的commit版本进行回退操作
// 回退到指定的提交版本
git reset 【commit-sha】
// 默认为mixed模式,指的是保留更改,只是将commit与index回到指定版本
// 使用soft,则是指保留更改,将commit回退到指定版本,index不变
// 如无需保留更改,可使用--hard指令,将不保留更改,commit与index都将回退
git reset --hard 【commit-sha】
本地回退版本后,如远程的分支高与回退后的本地分支,提交将会报错
这时候需要强制推送才能推送成功,注意:一旦强制推送成功,将会丢失原来的远程分支内容,而替换称你强制推送的分支内容
// 通过添加指令 --force 完成强制推送
git push --force
而如果在你强制推送之前,别的同事或者生产环境已经同步了远程分支的内容,那么在你强制推送后,他们的本地代码将无法通过git pull同步远程分支,因为他们的分支高于远程分支,如需强制同步远程分支到他们的本地代码,可使用一下操作
# 这里以master分支为例
git fetch --all
git reset --hard origin/master
git pull
# 注意,使用以上操作,你的本地更改将会丢失,远程分支会强制替换本地分支
问:那么我们该如何回退远程分支代码,但又能让同事通过git pull同步远程分支呢?
revert操作实践
当我们想要回退,但是不想要删除过去提交的记录,我们就可以使用revert操作了,具体是用如下
git revert 【commit-sha】
执行revert操作后,将会生成一条新的commit记录,这条记录可以告诉同事该记录用于回退版本,而同事可直接使用git pull 同步远程分支。