Git撤回已经推送(push)至远程仓库提交(commit)的版本

您所在的位置:网站首页 git撤销commit Git撤回已经推送(push)至远程仓库提交(commit)的版本

Git撤回已经推送(push)至远程仓库提交(commit)的版本

2022-11-15 14:16| 来源: 网络整理| 查看: 265

背景

所以,经常会遇到已经提交远程仓库,但是又不是我想要的版本,要撤下来。

回退版本一般使用git reset,又分为:

# 不删除工作空间改动代码,撤销commit,不撤销git add . git reset --soft xxx---版本号---xxxx # 删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。 git reset --hard xxx---版本号---xxxx

  

两种。

可以用git reset --soft HEAD~1(git reset --hard HEAD~1), 用来表示上一个版本,因为上一版本其实就是当前-1。git reset --soft HEAD~1 也可写成 git reset --soft HEAD^  。

也可以用git reset HEAD 表示当前版本,运行后并不会有什么变化,因为HEAD就是当前。

说这两者区别前,我们首先要明白一个东西,commits。

它在git中扮演了一个重要角色,我们平常用的一些操作git clone ,git commit 都会产生commits,通俗的讲这个就是版本号。

但是git reset并不会产生commits(不是不会产生,而是会产生 但是都是一样的),我们可以先看看自己项目中的commits,使用如下命令:git reflog。

Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

前面那一串数字就是commits。而git reset可以看成不产生commits,它只是改变了当前HEAD指向的commits。

git reset --soft 表示只是改变了HEAD的指向,本地代码不会变化,我们使用git status依然可以看到,同时也可以git commit提交。

git reset --hard后者直接回改变本地源码,不仅仅指向变化了,代码也回到了那个版本时的代码,所以使用是一定要小心,想清楚。

备注:

如果commit注释写错了,只是想改一下注释,只需要,git commit --amend,此时会进入默认vim编辑器,修改注释完毕后保存就好了。

解决方案1

Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

注意这个git  reflog 列表是逆序排列的,最上面的最新的commit。

git reset --hard HEAD~1后,最后一个(HEAD->masterGit撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP),将一直往下走,并进一步接近 Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

以上图所示的状态时,如果再来两次 git reset --hard HEAD~1, 将回到初次提交后的状态。

之后,使用git status ,可发现此时还在缓存区中的代码,其含义是,第一次初始化提交后 ,进行了之后的add后新加入的文件 。

注意这种操作是本地的仓库操作,如果你连续commit了很多次,而这些commit还没有来得及提交远程仓库。此时如果想回到上次本地commit的话,也可以如上操作。再push,便可达到目的。

Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

这时候就好办了,我们选择很多,可以直接修改代码,再commit,也可以取消git add 命令, 如:

git rm -f --cached .idea/*

Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

解决方案2 (推荐)

首先,通过git log查看提交信息,以便获取需要回退至的版本号。

Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

然后,通过git reset –soft 重置至指定版本的提交,达到撤销提交。

$ git reset --soft  85dee0d8b108c7450e0c820b2d72928f98d94f93

参数soft指的是:保留当前工作区,以便重新提交 。还可以选择参数hard,会撤销相应工作区的修改,一定要谨慎使用。

Git撤回已经推送(push)至远程仓库提交(commit)的版本-LMLPHP

通过git push origin master –force强制提交当前版本号,以达到撤销仓库远程版本号的目的。

Cheetah@xxx MINGW64 /e/Projs/enft/data/cv_key_frame (master) $ git push origin master -f Total 0 (delta 0), reused 0 (delta 0) To github.com:AnthonyGIS/video_frame.git + c63650a...85dee0d master -> master (forced update) Cheetah@xxx MINGW64 /e/Projs/enft/data/cv_key_frame (master)

  

最后,修改代码,重新提交和推送。

//修改代码,添加修改 git add . //重新提交 git commit -m "xxx" //重新推送 git push origin master参考文章

Git撤销已经推送(push)至远端仓库的提交(commit)信息

git push提交成功后如何撤销回退

git commit之后,想撤销commit

 8236


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3