版权声明:本文为博主原创文章,未经博主允许不得转载。
- cd ~/user
- mkdir sample2
- cd sample2
- git init
- echo "1" > user.txt
- git add .
- git commit -m "NO.1 commit"
- echo "2" >> user.txt
- git add .
- git commit -m "NO.2 commit"
- echo "3" >> user.txt
- git add .
- git commit -m "NO.3 commit"
- git log
- cat user.txt
新建一个仓库,生成3次提交,每次提交只是简单的在user.txt文件后追加一个数字
之前已经介绍过Git reset --hard是连同工作区一起彻底回退,后面的接的参数为HEAD~2,表示回退2次的提交,也可以用HEAD^^,还可以使用哈希值(SHA1),哈希值可以不全写,只要能区分不同提交就可以。
现在我们将NO.2和NO.3的提交合并一起再提交,这时使用git reset就可以了,保留工作区的内容。
- git reset HEAD^^
- git add .
- git commit -m "NO.2 and NO.3 commit"
- git log
- cat user.txt
修改结果与之前一样,但log的结果已经变化了
- git reset --hard HEAD^
回退错误的操作
如果我们错误操作连同工作区也回退了,就是修改都没了,也有办法回退操作
- git reflog
查看到之前执行过的操作,可以查看到前一个操作所在的提交(commit)的哈希值ee78fd6
- git reset --hard HEAD@{1} ( git reset --hard ee78fd6)
使用git reset --hard执行回退,--hard工作区也一起回退
拷贝本地版本到服务器
如果的把错误的提交更新到服务器,就不能使用git reset回退了
- cd ~/user1
- git clone --bare sample2 ~/repo/sample2.git
因为之前没有在服务器上建立远程仓库,先克隆一份裸的版本,再复制到服务器。因为是本地模拟服务器,所以直接克隆到相应目录
将user.txt修改成以上所示
- git add .
- git commit -m "error commit"
- git remote add origin service_name@127.0.0.1:repo/sample2.git
- git push origin master
因为服务器的版本是本地复制的,所以本地版本没有自动将service_name@127.0.0.1:repo/sample2.git命名为origin,所以我们要设置一下以方便以后提交。
服务器上回退提交
- git revert HEAD
自动生成的提交说明,不修改,ctrl+x退出
- git log
- git push origin master
这样就能回退最近一次的提交,当然也可以回退到更早以前的提交,但只回退单次提交,例如回退前一次提交HEAD^(NO.2 and NO.3 commit),那么第一次的提交HEAD(error commit)不会被回退,还会存在。不会像reset那样将该提交以后的版本都一起回退。
- git diff HEAD^
使用git diff查看修改的详情,可以看出只是将要回退的提交的删除和添加的内容做了一次反操作,所以revert只回退单独一次提交的结果
-
顶
- 0