Git撤销和回退以及注意事项

       最近在公司带项目,发现一些中级开发会遇到开发错分支的情况,也就是在错误的分支上写了一通代码,然后提交了,想回退又担心代码没了,又不想手动复制代码再提交,确实有点头疼。这里就整理下,怎么处理这些意外情况。

       首先,先创建一个gitee仓库, https://gitee.com/noname123/gitCourse.git ,然后IDEA拉取,添加.gitignore文件,再提交。

 一、新建文件,没有add,怎么回退?

创建文件a.txt,然后git status,显示文件untracted状态

方法:直接删掉,so easy。

二、新建文件,add了,怎么回退?

其实也可以直接删掉,但是规范的操作是我们得先删除索引index

比如现在A.txt已经提交,变成绿色的了。执行git rm --cached A.txt, 再看文件还是,但是变成红色未add状态了,这时候就可以删掉了。

三,add了,然后也commitl了,怎么回退?

大多数时候,我们都是再改一次,再提交,但是这只针对文件比较少的情况,并且也不能保证跟你再改的时候能跟上一次提交前的完全相同。

假如现在A.txt已经commit了,注释是"添加首次时间",现在查看版本号,确实多了一条记录。执行git reset HEAD~1,回到上一次提交前的状态。查看文件,A.txt变成红色了,并且文件内容还在,也就是说我们的代码还保留着。

这时候我们如果我们只是返回修改,那么修改,再commit一次,对应注释是"第二次提交",就可以了,并且这时候查看log,发现回退的那次记录已经没有了。

如果我们是真的撤销,可以执行git reset --hard +版本号,然后再commit一次,注意这样操作本地代码直接没有了。

但是查看reflog,还是可以找到的,并且我们reset也生成了一条log

四、add了,commit了,push了,怎么回退?

其实操作跟上面的一样,只是最后,我们再push一次。

比如,我们现在提交把202103071355的记录,push到远程,现在远程是202103071355,注释"第五次提交";

然后我们把记录修改成202103071414,再add, commit, push,对应"第六次提交", 查看log

如果我们现在要回退到上一次并保留代码,git reset HEAD ~1, 然后修改,再commit,push

如果我们是撤销并删除代码,找到第五次的版本号3c08a8356be756e0f2ee076a875c815fd8e3e40f,然后git reset --hard 3c08a8356be756e0f2ee076a875c815fd8e3e40f,这时候本地代码直接回到上次开发时的状态,也就是跟上上次提交的记录一样了。最终又回到202103071355了, 最后git push origin master -f,加-f是因为此时你的版本号已经小于远程的版本号,提交不了,但是你不能pull,否则相当于没有撤销。必须加-f,f大概是force的意思,强制推送到远程。

查看本地log日志,发现"第六次提交"已经没有了

五、我的错误的分支上写了代码,还没有add,怎么弄到正确的分支上?

现在基于master,创建一个新分支dev。

本地git pull origin  master, 拉去最新分支git checkout dev,切换到dev,查看代码是202103071355,说明没问题。然后我们回到master,这是一个错误的分支,正常的开发过程是不能基于maser开发的。但是我们要重现这个问题过程。

假如现在有个开发人员在master,修改记录到202103071453, 并且添加了一个B.txt文件,然后突然发现分支错了,应该在dev开发,发现的还早,改怎么把这条记录迁移到dev呢,其实没有add,可以直接切分支,直接把代码带过去,也就是直接git checkout dev,代码还在,重新add ,commit, push,注释是"第六次提交",现在dev有两个文件,并且都是202103071453。

现在回到master,git checkout master,发现代码是正常的,只有一个A.txt,并且内容是202103071355

六、我的错误的分支上写了代码,已经commit了,怎么弄到正确的分支上?

现在我们把master和dev合并下,保证两边代码一致,都是两个文件,都是202103071453,然后push到远程master

方法:git reset HEAD~1

本地地方回到上一个版本,代码文件颜色也会变,这时候,git stash,将代码存在暂存区,git checkout dev, 切到dev, 再git stash pop,将暂存区代码拿出来,再清空暂存区。

然后你会发现dev上已经有你开发的代码了。然后正常操作,最后回到mater,再commit一次即可。

七、我的错误的分支上写了代码,已经push了,怎么弄到正确的分支上?

现在我们回到master,A.txt改成202103071513,B.txt添加一条202103071513,添加一个文件C.txt,内容202103071513

然后我们提交到远程master

现在突然发现了,开发分支错了!开始回退,并保留代码。

步骤:

还是在master,执行git reset HEAD~1,发现文件颜色都变回来了

然后执行git stash,把代码放到暂存区,然后git checkout dev,切到dev, 执行 git stash pop,发现代码到dev了,pop会把暂存区代码删掉,也就是说只能用一次

在dev执行add ,commit, push操作到远程dev

注意,还没完,我们再回到master, 发现修改的记录都没有了,然后我们再push一次,提示push失败,还是因为版本落后了,

使用git push origin master -f, 好了,maser代码回到之前的版本,只有一个A.txt.和B.txt,远程代码也是只有一个A.txt.和B.txt,并且都是202103071453。

八、我的错误的分支上写了代码,已经push了,并且push了很多次,怎么弄到正确的分支上?这种心大的开发,就是我碰到的

解决步骤:

跟问题七是一样的,只不过问题七执行git reset HEAD~1,回退一步,这里就需要查看log,回退多步了。

先合并dev到master,保证dev和master相同。

假如,我们在master提交三次,分别改一个A.txt, 加一个文件,再在B.txt文件追加一条记录

操作三次

master现在是这样的

然后回退,这时候要看版本号

我们提交了三次,就是说要回到第七次提交的时候,第七次版本号是cd7d9907aadd91959474c87c5547cad2803d1afa,执行git reset --soft cd7d9907aadd91959474c87c5547cad2803d1afa
发现文件颜色变了

这时候跟第七个问题一样

git stash

git checkout dev

git stash pop

git add .

git commit -m "第八次提交"

git push origin dev

代码已经到dev了

最后回到master,master代码已经没了

git checkout master

但是需要再push一次,把远程的master也回退掉

大功告成,看了3个小时,写3个小时,觉得有用点个赞。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinqing5130

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值