Git入门——版本回退'reset'与reset后的'push报错'

本文介绍了如何在Git中使用HEAD指针回退版本,并详细阐述了在回退后如何找回丢失的版本,以及在版本回退后遇到push报错时的解决方法,包括使用git pull和git push -f的注意事项。强调了在多人协作中避免使用-f强制推送以防止覆盖他人工作的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Git中,HEAD指向当前版本,也就是最新的提交3a6d4df…(注意.大家的commit肯定都不一样)
用HEAD不同组合来表示不同的版本
HEAD^就是表示上一个版本
HEAD^^就是表示上上一个版本
HEAD~100就是往上100个版本

回退至上一个版本:
  git reset --hard HEAD^

回退之后后悔了?原来最新的版本已经看不到了!
若想再返回原来那个最新的版本,办法还是有的:

1.
只要上面的命令行窗口还没有被关掉,
你可以向上翻到找找有没有那个最新版本的commit,
于是就可以指定回到那个本已消失的版本了(版本号没必要写全,但是不可太少)
git reset –hard (commit版本号)

2.
若没找到,也可以试试git reflog,也可以查看以前的commit(查看历史记录)
再进行1.的步骤.

注意,reset切换后,push,若是报错,如下:

! [rejected]
master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:PisecesPeng/usegit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

(可以使用 git pull + 远程名+ 分支名操作,使得远程与本地之间保持一致)

若是想直接强制推送,可以加上 -f 参数强制push

ps.
这个错误是因为本地与远程的版本(文件)不相同,你可以先 pull 本地即可.
若是直接强制推送的话,那么之前对远程进行的操作与修改的版本将会消失(以你本地的版本为基准).
且注意,这种消失是不可以进行版本回退的,因为你会发现远程的版本已经和你本地版本一样了.

举个例子就是,
你和你(时空混乱 >_< )进行一场比赛,本地你还在起点线慢悠悠,远程你已经出发跑了100米。
在这100米过程中,远程你喝了一瓶水,吃了一碗面。
现在本地你要开跑了,正确做法是pull远程你本地你直接从100米之后起跑,水和面都没浪费,也没有白跑。
但是!如果 -f 强制push了呢?那么远程你又被本地你强制变回起点线了,远程你的这个100米就白跑了,水和面都没留下痕迹…

所以,若是多人协作之中,这是对他人工作的浪费,因为由于你的版本落后,-f强制push之后,他人推送更新的多个版本可能就要白费了,项目又变为了你本地的版本。


我的Git入门学习,廖雪峰老师的教程帮助了我很多;
也希望能和大家分享一下;
廖雪峰老师的官方网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值