git版本号回滚

时间:2023-12-22 20:55:14

先说今天遇到的问题,看到一个config.php的配置文件一直在改动的状态下,可是和远程的config.php是不一致的,我不须要提交它,可是看它在 modified的状态下,非常不爽。想删除它。git   rm  config.php,然后git push了下,结果不仅把本地的config.php干掉了,把远程的config.php也给干掉了,git版本号回滚,原来这个git
rm有这种功效,并且我 删除的不仅仅是这一个文件,还有n个文件。

想到要回滚到近期的一次提交。做这个工作前。提醒下,在本地直接把代码备份一份,要不之后的操作不当。会直接把你的这次改动所有抹杀掉。到时你哭都来不及。除非你对git有相对的把握,深知不论什么 一步操作的意义。了解git的 分支机制。

回滚分三步:

(1)备份你当前的代码 库一份,不是必须的操作,可是提醒要 做的,当然有能够用git branch backup 把当前的版本号备份到一个新的分支

(2)git log找到要回滚的版本号

(3)git reset --hard 要回滚到的版本。比方 git reset --hard 91deaf(文件都回来了。包含config.php)

然后git status的时候,可能会提醒你 Your branch is behind 'origin/master' by 2 commits 类似的错误。然后提醒你用git pull先下拉。假设你直接git push是推不了的,

由于远程已经是在你reset后的版本号了,也就是说远程的版本号比你reset的版本号新,你是reset回滚到老版本号的。

 可是你git pull后(我用的是git fetch,之后再git merge合并)。又会又一次把远程的最新版本号库覆盖掉本地的老版本号,这样又回到了刚開始的问题。

假设 你在上述回滚三步之后,假设发现 有问题 ,又一次切换到备份分支,也回到了刚開始的你本地的操作開始的版本号,也就是reset回滚回来的文件又被删除了,比方config.php。这点非常NB。

事实上备份分支也就是你当前最新状态的版本号 。reset后回到了老版本号。

那么究竟怎么解决这个问题呢?用了一个非常笨的办法,可是眼下没有找到好的方法。

git reset 后。git  push -f 强推,假设不带參数-f是推不了的。

推过之后。再把你这次改动的文件一个个加上去。git add ,git  commit ,git push 完成。

思考:或许在用git  reset --soft会解决问题。