git如何进行版本回退

目录

情况1:工作区发生改变但还未git add

情况2:已经git add但还未git commit

情况3:已经git commit但还未git push

情况4:已经git push


情况1:工作区发生改变但还未git add

情况描述:工作区发生变化,比如修改了代码,但还未git add,即还未保存在暂存区,此时如何操作?

如果是想放弃这些更改:则可以使用git restore命令。在不带任何参数时,git restore默认会尝试恢复工作目录中的文件到它们最近一次提交的状态。这意味着它会撤销工作目录中对这些文件的修改,但不会影响暂存区中的文件。

# 放弃指定文件的修改。其中文件路径参考git status展示的那样。
git restore 文件1路径 文件2路径

# 放弃全部文件的修改
git restore .

如果是想暂时保存起来:有时代码还未写完,但又需要切换到其它分支去处理事情。就需要先临时存储起来,切换到其它分支事情处理完后,再切换分支回来,再将之前临时存储的改动恢复过来,继续进行代码开发。

git stash save "这里写临时存储名字"

git checkout 其它分支

处理其它分支的事情

git checkout 原来的分支

git stash pop

情况2:已经git add但还未git commit

说明此时文件改动已经保存在暂存区,但还未提交到本地库

第一步:可以使用git restore --staged 命令。它会取消暂存区中指定文件的更改,但保留这些更改在工作目录中。

# 撤销当前暂存区中部分文件的暂存状态
git restore --staged 文件1路径 文件2路径

# 撤销当前暂存区中所有文件的暂存状态,但不影响工作区中的文件。
git restore --staged .

第二步:然后对工作区的更改如何处理,参考情况1。

当然这两步可以合二为一,用git restore --staged --worktree 命令。同时指定这两个选项时,git restore会同时作用于暂存区和工作目录,撤销对指定文件的更改。

情况3:已经git commit但还未git push

由于已经git commit,会产生提交历史,可以通过git log查看提交的多个历史版本

此时可以通过git reset命令进行版本回退,有两种参数选择:

  • 如果想回退到指定版本,且不将这两个版本之间的更改保留在工作区:git reset --hard commitID。在这条命令后,本地仓库回退到指定版本,且工作区的内容会变为回退版本的情况。
  • 如果想回退到指定版本,且需要这两个版本之间的更改保留在工作区:git reset --soft commitID。在这条命令后,本地仓库回退到指定版本,但工作区的内容仍为最新改动的情况。然后怎么处理参考情况1。

【如何回退到和远程版本一样】:有时候,本地项目开发过程中发生错误修改需要放弃全部修改时,可以以远程分支作为回退点,将本地仓库退回到与远程分支一样,执行的命令如下:

git reset --hard origin/master // origin代表你远程仓库的名字,master代表分支名

当你执行 git reset --hard origin/master 命令时,你实际上是在告诉 Git:

  • 找到远程仓库 origin 的 master 分支的最新提交。
  • 将当前分支的 HEAD 指针移动到那个提交。
  • 丢弃从那个提交之后的所有本地更改(包括暂存区的更改和工作区的更改)。

情况4:已经git push

(1)首先回退本地仓库版本:参考情况3,回退到指定版本。

(2)然后回退远程仓库版本:①先在远程仓库网页上查看提交记录,将其revert到和本地仓库一样的版本,②然后在本地通过git push带-f参数进行强制推送。推送成功后,再次去查看远程仓库的版本和提交记录,就可以发现已经回退了。


end

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值