目前团队在做一个项目,大家使用同一个GIT分支写代码,每次都使用一个脚本更新推送代码。脚本如下:
echo "please enter commit info:"
read msg
git pull origin master
git add .
git commit -a -m "$msg"
git push -u origin master
#sync
ssh root@XXXXXX.com 'cd /var/www/xv/web/xvstore && git pull'
正常情况下,大家不同时写同一个文件,使用这个脚本能轻松的完成代码的更新。但是当发生冲突时,很有可能会将远程库中的代码覆盖。
昨天更新代码的时候,由于文件冲突,强行运行多次脚步,将代码推送上去,一看发现其他代码也被覆盖掉,顿时想起回退版本。在看过几种方法之后,发现了一种比较简单的方法,解决远程仓库回退的问题。
首先运行git log,git reset
具体用哪个命令根据具体情况判断
回退所有内容到上一个版本
git reset HEAD^
回退a.py这个文件的版本到上一个版本
git reset HEAD^ a.py
向前回退到第3个版本
git reset –soft HEAD~3
将本地的状态回退到和远程的一样
git reset –hard origin/master
回退到某个版本
git reset 057d
回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit
git revert HEAD
然后git push
本地的master分支 reset到你相应的位置之后,在进行push的时候加上-f参数.
完整的命令是:
git push -f origin master
在push的时候,需要你有强制更新的权限(如果你们的git服务器有权限管理的话).
详细的含义你可以在命令行中输入 git push –help 查看.
此时远程仓库的代码会被强行更新到这个版本。之前的commit全部消失。
最后
Git确实是一个博大精深的工具,有大多要学的东西