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

背景

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

回退版本一般使用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。

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

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

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

备注:

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

解决方案1

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

git reset --hard HEAD~1后,最后一个(HEAD->master

),将一直往下走,并进一步接近 

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

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

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

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

git rm -f --cached .idea/*

解决方案2 (推荐)

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

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

$ git reset --soft  85dee0d8b108c7450e0c820b2d72928f98d94f93

参数soft指的是:保留当前工作区,以便重新提交 。

还可以选择参数hard,会撤销相应工作区的修改,一定要谨慎使用。

通过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

参考文章

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当我们对代码进行了commit但还没有push时,如果发现有错误或不必要的更改,可以使用git撤回commit来撤销之前的操作。具体步骤如下: 1.使用git log或git reflog查看commit的ID,找到需要撤回commit的ID。 2.使用git reset命令,将当前分支的HEAD指向需要撤回commit的上一个commit,即执行以下命令: ``` git reset <commit ID> ``` 3.执行以上命令后,代码被撤回到了撤销commit的上一个commit状态。此时本地工作区的代码也被相应地还原到了之前的状态。 4.如果需要修改还原后的代码,可以进行相应的修改,然后再次提交(commit)和推送(push)这些修改。 需要注意的是,如果已经将本地代码推送到了远程仓库,并且其他开发者对这个仓库进行了修改,我们在本地执行撤回操作后,再次提交(push)时,可能会引起冲突。因此,在操作前需要确保操作的影响范围,并与其他开发者进行协作和沟通,以避免产生不必要的冲突和误解。 此外,如果之前的commit信息需要更新或修改,也可以使用git commit --amend命令来执行修改。 ### 回答2: 在使用 Git 进行版本控制的过程中,有时候我们可能会不小心提交了一些错误的代码,或者提交了一些不必要的代码。这时候,我们就需要使用 git 撤回 commit 的命令来撤回这些代码。 首先,我们需要使用 git log 命令来查看我们已经提交的所有代码的历史记录。然后,我们可以找到我们需要撤回的某次提交的 ID。 接着,我们可以使用 git reset 命令来撤回这次提交。如果我们只需要撤回这次提交,而不需要修改任何文件,那么我们可以使用 git reset --soft 命令来撤回这次提交。这个命令会将当前分支的指针指向这次提交的前一次提交,同时保留这次提交的修改,这样我们就可以重新提交代码了。 如果我们需要修改这次提交之前的代码,那么我们可以使用 git reset --mixed 命令来撤回这次提交。这个命令会将当前分支的指针指向这次提交的前一次提交,同时撤销这次提交的修改,让我们可以修改代码后重新提交。 最后,如果我们需要彻底删除这次提交及其修改,那么我们可以使用 git reset --hard 命令来撤回这次提交。这个命令会将当前分支的指针指向这次提交的前一次提交,并且彻底删除这次提交的修改,让我们可以重新提交代码。 总的来说,使用 git 撤回 commit 的命令是非常重要的。它可以帮助我们避免不必要的错误,保证代码的正确性和可靠性。 ### 回答3: 当你在使用Git版本控制系统时,你可能会遇到一些列不可预料的问题,例如你不小心提交了错误的代码或者忘记了添加某些文件,这些错误的commit会被保存在你的本地仓库中,如果你不做处理的话,它们会影响你的代码仓库的健康。 在撤回commit之前,你需要理解commit的概念。commitGit中的一个重要概念,它表示一次代码提交的快照,它包括了当前代码库的状态、修改的文件等等。commitGit一个核心概念,可以帮助你追踪你的代码。 如果你需要撤回一个pushcommit,你可以使用以下命令: 1. git log:查看你的提交历史记录,以获取你需要回滚的commit的哈希值。 2. git reset HEAD~1:回到上一个提交状态.这个命令会将你的代码回退到上一个提交状态,同时会撤销上一个提交。 3. git push -f:如果你想撤销你在远程存储库上的提交,你还需要使用git push -f命令将本地撤回提交同步到远程仓库。 这里需要注意的是,你在执行这个命令的时候,你需要确保你的删除操作只针对自己的工作分支而不是其他用户的工作分支。撤销一个已经推送远程仓库提交通常不被推荐,因为它会干扰其他协作开发者的工作。 当你使用git reset命令撤销一个commit时,你需要小心,因为它会永久性地删除你的代码。你可以使用git revert命令来撤销一个commitgit revert会产生一个新的提交,这个提交的改动是撤销了上一个提交。 在实际使用过程中,您可以先使用git revert命令进行回滚,然后在将其推送远程分支。这样做可以避免解决和其他人的代码冲突,同时保持代码历史的完整性。 总之,撤销commit的过程并不复杂,但是需要注意操作的细节。在实际应用中,我们需要根据不同的情况选择适合的操作方式,以保持代码的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值