Git版本回退并强制推送到远端
本文参考廖雪峰的Git教程
前言:本文章解决问题的前提是本人不小心修改了本地代码仓库的最外层目录权限,不知道原权限是什么,导致本地git提示几十个文件被修改过,实际内容并未修改,可能是目录权限改变被git识别为改动,解决方案如些。
温馨提示:目录权限谨慎修改,避免以后在服务器部署时权限引起不必要的麻烦。
1️⃣、首先查看git提交日志,查看commit id
git log //git log命令显示从最近到最远的提交日志
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:
git log --pretty=oneline
2️⃣、回滚到上一个提交版本或者指定版本(commit id)
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
git reset --hard HEAD^
查看操作后版本库的状态确认是否回退成功,发现最近的那个版本已经看不到了,表示已回滚:
git log //此时回退的只是本地仓库的回退 远程分支并没有回退
如果还想再次回去原先最新版本,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个原来最新版本的commit id是1094adb…,于是就可以指定回到未来的某个版本:
git reset --hard 1094adb.. //版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
3️⃣、现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在Git中,总是有后悔药可以吃的,Git提供了一个命令git reflog用来记录你的每一次命令:
git reflog //打印你记录你的每一次操作记录
git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录,而且跟进结果可以回退道某一个修改。
4️⃣、把当前分支强制提交到远程
git push -f origin <branch name>(分支名称); //强行将本地回退后的分支提交到远程分支;
5️⃣、别人提交或拉取代码可能会因为我们回退了版本而出现错误或者无法拉取,解决命令如下:
git fetch --all
版权声明:本人原创文章,转载时请保留所有权并以超链接形式标明文章出处,谢谢!