git 回退(reset)、反做(revert):撤回命令总结

git撤销及回滚命令

  1. 工作区:指在自己本地分支开发,未进行 git add 操作之前。
  2. 暂存区:执行过 git add 操作之后,但是为执行 git commit 操作。
  3. 本地分支:执行过 git commit 操作,但是未执行 git push 操作。
  4. 远程分支:执行过 git push 操作。

git reset

在这里插入图片描述

分三种场景
  • 暂存区(执行了 git add 操作 未执行 git commit 操作)
   git reset HEAD .       //撤回所有 add 的文件
   git reset HEAD  文件名        // 撤回指定的文件,这个命令只改变暂存区代码,并不影响其他区域代码。
  • 尚未远程推送(还未git push操作),只保存在本地仓库
  git log        //查询提交日志 找到自己需要回滚的 版本号(commit_id)
  // 以下三种方式
  git reset --hard commit_id     //撤销commit提交以及代码的修改
  git reset --hard HEAD^    // 回退到最近一次的提交
  git reset commit_id     // 仅仅撤销本地仓库的commit提交,代码不变

git reset 的几种模式
git reset主要有–soft –mixed –hard 三种方式
HEAD^ 的意思是上一个版本,也可以写成 HEAD~1
如果你进行了2次commit,想都撤回,可以使用 HEAD~2
–mixed常用,默认这种方式)
不删除工作空间改动代码,撤销commit,并且撤销(git add .) 操作
这个为默认参数,git reset --mixed HEAD^git reset HEAD^ 效果是一样的。
–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard慎用
删除工作空间改动代码,撤销commit,撤销git add .

如果 commit 注释写错了,我们可以使用 git commit --amend -m "备注" 既可以覆盖上一次的备注信息。

  • 已经远程推送(已经git push操作了),远程仓库已经保存
    第三种场景进行撤回的命令和第二个场景撤回命令一样。此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧, 需要进行 git push -f origin branchName 操作。

注意:一定要注意回滚指定版本号,不应该是最新提交的版本号,而应该是最新一次commit之前的版本号,否则无法进行回滚的。

git revert

git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。

适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
在这里插入图片描述

你在当前分支上做了几次提交,突然发现放错了分支,这几个提交本应该放到另一个分支。

 新建一个 feature 分支,指向当前最新的提交
 注意,这时依然停留在当前分支
 git branch feature

 切换到这几次提交之前的状态
 git reset --hard [当前分支此前的最后一次提交]

 切换到 feature 分支
 git checkout feature

参考:
http://www.ruanyifeng.com/blog/2019/12/git-undo.html
https://blog.csdn.net/yxlshk/article/details/79944535
https://www.cnblogs.com/ming-blogs/p/13218420.html

### Git 中撤销版本回退的操作方法 在 Git 中,如果已经执行了版本回退操作(无论是通过 `git reset` 还是 `git revert`),可以通过特定的方法来恢复到之前的提交状态。 #### 使用 `reflog` 恢复被重置的提交 当使用 `git reset` 执行硬重置 (`--hard`) 或混合重置 (`--mixed`) 后,原始提交并不会立即丢失。Git 的 `reflog` 记录了每一次 HEAD 的变动历史,因此可以利用它找到并恢复被丢弃的提交。 运行以下命令查看 reflog 日志: ```bash git reflog ``` 这会显示所有的 HEAD 变动记录,其中包括每次提交、切换分支以及重置操作。假设目标提交对应的哈希值为 `<commit-hash>`,则可通过以下方式恢复该提交: ```bash git reset --hard <commit-hash> ``` 此方法适用于因误用 `git reset` 而丢失的历史提交[^1]。 #### 撤销由 `git revert` 引起的变化 对于 `git revert` 命令来说,其本质是在现有基础上创建一个新的提交以抵消之前某次提交的影响。要撤回这个新提交,只需再次对其应用 `revert` 即可。例如,若最后一次提交是由 `git revert` 产生的,则可以用如下命令将其转: ```bash git revert HEAD ``` 这样就重新引入了原本被取消掉的内容,并生成一条新的提交记录[^2]。 另外,在某些情况下可能需要批量处理多个连续的 revert 提交;此时应逐一针对这些提交分别执行上述过程或者借助交互模式完成更复杂的场景需求分析后再决定具体实施方案[^3]。 #### 总结注意事项 需要注意的是,无论采用哪种方式进行恢复动作前都建议先备份当前的工作目录以防万一出现问题无法挽回损失的数据资料情况发生。 ```python # 示例 Python脚本用于自动化获取最新一次Revert Commit ID (仅作演示用途) import subprocess def get_latest_revert_commit(): result = subprocess.run(['git', 'log', '--pretty=format:%H %s'], stdout=subprocess.PIPE, text=True) lines = result.stdout.splitlines() for line in reversed(lines): # 查找最新的 Revert 开头的日志条目 if "Revert" in line: return line.split()[0] latest_revert_id = get_latest_revert_commit() if latest_revert_id is not None: print(f"The most recent revert commit id is {latest_revert_id}. You can undo it by running:") print(f"git revert {latest_revert_id}") else: print("No revert commits found.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值