在软件构造的几次实验中,我们提交代码和实验报告到github上时,在对git的各种指令的操作中,遇到了许多小问题,下面对一个记忆犹新的问题给出了一些解决方法。
改变远程仓库上的错误更改的版本。
在实验三中我们最后提交的版本要求如下
master分支为程序主要结果,314change分支是进行了一些改动和扩展之后的结果,但是我一不小心将master分支改成了和314change一模一样的代码,并将其push到远程仓库当中。所以我需要回滚到分支之前那个版本的代码,再将其完善后push到主分支之上。
首先介绍和回滚相关的指令
git reset
git reset的作用是修改HEAD的位置,即将HEAD指向的master位置改变为之前存在的某个版本。
下面介绍几个git reset的常见用法:
git reset --hard HEAD^ 回退到上个版本
git reset --hard commitid 退到/进到 指定commitid
其中–hard指的是版本回退到那个版本的时候将本地文件同时回滚到之前的状态,若将–hard换成–soft,则本地文件保留回滚之前的状态。由于我是想要找到错误更改之前的代码,所以先用–hard回滚到我想要的版本。查找版本号运用git reflog指令,这非常常见,不必多说。
之后由于我想改变提交到github上远程仓库的错误版本,如果我直接git push会报错
这是因为我们本地库HEAD指向的版本比远程库的要旧。
我通过查阅资料,发现可以在git push后面加上–force来强制上传,
git push–force
并在远程仓库中自动删除该版本后面的几个版本。但是这样强制性的改变往往会出现一些意料外的错误。
后来我又想了一个办法
1.git reset --hard oldcommit
2.git reset --soft newcommit
首先强制回到之前版本,改变文件,再–soft指向最新版本,这样文件保留着老版本,同时master指向新版本,与远程仓库一致。这样直接正常push上去就可以了。下面是最终的成果。