7 版本回退

每当将文件修改到一定程度时,都可以使用之前的两条命令保存一个快照:

$ git add [Filename]
$ git commit -m "comment"

这个“快照”在 Git 中被称为 commit。
一旦文件不小心被该乱了,或者误删了文件,还可以从最近的一个 commit 恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

查看历史提交版本

之前提交到版本库中的几个不同的 new 1.txt 如下:

  • 版本1:First TXT file
Git is a version control system.
Git is free software.
  • 版本2:Second TXT file
Git is a distributed version control system.
Git is free software.
  • 版本3:Third TXT file
Git is a distributed version control system.
Git is free software distributed under the GPL.

在 Git 中,使用 git log 命令查看历史记录

$ git log
commit d709614a54f72c3561ecd129439e28acd5f2b00f (HEAD -> master)
Author: Cg <********@example.com>
Date:   Sun Dec 22 15:01:25 2019 +0800

    Third TXT file

commit ce29c7e8846eefe03a48881b1a065103d3a01aed
Author: Cg <********@example.com>
Date:   Sun Dec 22 00:23:15 2019 +0800

    Second TXT file

commit 3e23e9fe3d1fdf6e193095889f5d4311ab6baa06
Author: Cg <********@example.com>
Date:   Sun Dec 22 00:00:03 2019 +0800

    First TXT file

git log 命令显示从最近到最远的提交日志,可以从中看到三次的提交记录,如果觉得输出信息太多,可以加上参数:–pretty=oneline。

$ git log --pretty=oneline
d709614a54f72c3561ecd129439e28acd5f2b00f (HEAD -> master) Third TXT file
ce29c7e8846eefe03a48881b1a065103d3a01aed Second TXT file
3e23e9fe3d1fdf6e193095889f5d4311ab6baa06 First TXT file

每条版本信息前面显示的一大串十六进制的编码是 commit id (版本号),和 SVN 不同,Git 的 commit id 不是 1,2,3……递增的数字,而是一个用 SHA1 计算出来的数字,这是因为 Git 是分布式的版本控制系统,会有多人共同在版本库中工作,如果使用 1,2,3……作为版本号会冲突。

回退版本

回到过去

现在从 “Third TXT file” 回退到 “Second TXT file”

  • 首先,Git 必须知道当前版本是哪个版本。在 Git 中,用 HEAD 表示当前版本,也就是最新提交的 d709614…,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,如果是往上 100 个版本就写成 HEAD~100。
    将当前版本回退到上一个版本使用 git reset 命令:
$ git reset --hard HEAD^
HEAD is now at ce29c7e Second TXT file

查看 new 1.txt 的内容

$ cat new\ 1.txt
Git is a distributed version control system.
Git is free software.

还原成功!

返回未来

查看当前版本库状态

$ git log --pretty=oneline
ce29c7e8846eefe03a48881b1a065103d3a01aed (HEAD -> master) Second TXT file
3e23e9fe3d1fdf6e193095889f5d4311ab6baa06 First TXT file

最新的版本 “Third TXT file” 不见了,如果想重新回到这个 “Third TXT file” 这个版本怎么办?
只需要找到这个版本的 commit id,就可以回到未来的某个指定版本了。

$ git reset --hard d709614
HEAD is now at d709614 Third TXT file

返回成功,查看内容:

$ cat new\ 1.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.

在回退时,版本号不需要写完整,写前几位就行,Git 会自己去找,但是也不要只写前一两位,可能多个版本的 commit id 的前两位是相同的。

Git 的版本回退速度非常快,因为 Git 在内部有个指向当前版本的 HEAD 指针,当回退版本时,Git 仅仅是把 HEAD 从指向 “Third TXT file” 改为指向 “Second TXT file”,然后顺便把工作区的文件更新了。

当然,如果在 “回到未来” 的过程中忘记了版本号怎么办,即从 “Second TXT file” 回到 “Third TXT file” 但是忘记了 “Third TXT file” 的 commit id 该怎么办。Git 提供了一个命令 git reflog 来记录每一次的命令

$ git reflog
ce29c7e (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
d709614 HEAD@{1}: reset: moving to d709614
ce29c7e (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
d709614 HEAD@{3}: commit: Third TXT file
ce29c7e (HEAD -> master) HEAD@{4}: commit: Second TXT file
3e23e9f HEAD@{5}: commit (initial): First TXT file

从中可以看到 “Third TXT file” 的 commit id 是 “d709614”,这时在使用 git reset 来 “返回未来”

$ git reset --hard d709614
HEAD is now at d709614 Third TXT file
演示了为无线无人机电池充电设计的感应电力传输(IPT)系统 Dynamic Wireless Charging for (UAV) using Inductive Coupling 模拟了为无人机(UAV)量身定制的无线电力传输(WPT)系统。该模型演示了直流电到高频交流电的转换,通过磁共振在气隙中无线传输能量,以及整流回直流电用于电池充电。 系统拓扑包括: 输入级:使用IGBT/二极管开关连接到全桥逆变器的直流电压源(12V)。 开关控制:脉冲发生器以85 kHz(周期:1/85000秒)的开关频率运行,这是SAE J2954无线充电标准的标准频率。 耦合级:使用互感和线性变压器块来模拟具有特定耦合系数的发射(Tx)和接收(Rx)线圈。 补偿:包括串联RLC分支,用于模拟谐振补偿网络(将线圈调谐到谐振频率)。 输出级:桥式整流器(基于二极管),用于将高频交流电转换回直流电,以供负载使用。 仪器:使用示波器块进行全面的电压和电流测量,用于分析输入/输出波形和效率。 模拟详细信息: 求解器:离散Tustin/向后Euler(通过powergui)。 采样时间:50e-6秒。 4.主要特点 高频逆变:模拟85 kHz下IGBT的开关瞬态。 磁耦合:模拟无人机着陆垫和机载接收器之间的松耦合行为。 Power GUI集成:用于专用电力系统离散仿真的设置。 波形分析:预配置的范围,用于查看逆变器输出电压、初级/次级电流和整流直流电压。 5.安装与使用 确保您已安装MATLAB和Simulink。 所需工具箱:必须安装Simscape Electrical(以前称为SimPowerSystems)工具箱才能运行sps_lib块。 打开文件并运行模拟。
<think>首先,用户正在询问有关 Git 本地版本回退的方法。我需要根据系统级指令进行结构化响应:使用中文,正确使用 LaTeX 格式,生成相关问题,等等。 回顾系统级指令: - 所有行内数学表达式都必须使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - 使用中文作答。 - 生成相关问题。 - 自然地添加引用标识。 用户的问题是关于 Git 本地版本回退方法的。我正在提供来自参考资料的参考资料: - [^1] 讨论使用 git reset --hard commit_id。 - [^2] 提到 git revert,但这是在谈论公共远程分支;对于本地来说,reset 更直接。 - [^3] 提供了详细的步骤:使用 git reflog 查找 commit_id,然后使用 git reset --hard commit_id。 - [^4] 解释了 HEAD 表示法,例如 HEAD^ 用于上一个版本。 - [^5] 强化了使用 git reset --hard 进行本地回退。 关键要点: - 对于本地版本回退,主要方法是使用 git reset --hard commit_id 或 git reset --hard HEAD~n。 - 首先,使用 git log 或 git reflog 找到所需的 commit_id。 - 然后,执行 git reset --hard <commit_id>。 结构化我的回答: 1. **清晰介绍**:解释什么是本地版本回退以及为什么需要它。 2. **分步骤方法**: - 步骤1:查找 commit ID(使用 git log 或 git reflog)。 - 步骤2:执行回退(使用 git reset --hard)。 3. **详细示例**:基于引用提供代码示例。 4. **注意事项**:警告有关更改的影响(例如,这会覆盖工作目录)。 5. **生成相关问题**:在最后,如指令所述。 确保使用适当的格式: - 对于像命令 git reset --hard commit_id 这样的内联代码,我可以使用代码块或反引号。由于这是一个技术响应,我应该使用代码块来格式化命令。 - 指令指定数学表达式使用 LaTeX,但这里不涉及数学内容,所以我无需添加任何内容。 - 自然地添加引用标识。例如,当解释一个步骤时,引用来源。 响应语言:全部使用中文。 最终结构: - 介绍本地版本回退。 - 方法一:使用 git reset --hard(主要方法)。 - 查找 commit ID。 - 执行命令。 - 方法二:使用 HEAD 表示法(替代方法)。 - 示例。 - 警告。 - 相关问题。 相关问题生成: - 如指令所述,在最后以“§§相关问题§§”开头。 - 可能的问题: 1. 如何恢复被覆盖的提交? 2. git reset 和 git revert 有什么区别? 3. 如何回退到远程分支? 引用: - 每当提到引用中的想法时,都要添加引用标识。 响应大纲: 1. 介绍:Git 本地版本回退允许你将本地仓库恢复到之前的提交状态。 2. 方法: - 使用 git reflog 或 git log 查找 commit ID [^3][^5]。 - 运行 git reset --hard <commit_id> [^1][^3][^5]。 - 或者使用 HEAD~n,例如 HEAD^ 表示上一个版本 [^4][^5]。 3. 示例: - 列出提交:git log --pretty=oneline。 - 选择并重置:git reset --hard d1681f1。 4. 注意事项:这将覆盖工作目录和暂存区,请谨慎操作。 5. 相关问题。 </think>### Git本地版本回退方法 在Git中,本地版本回退允许你将工作目录、暂存区和版本库恢复到之前的提交状态。这种方法常用于撤销本地错误提交或测试不同版本。以下是基于引用内容的详细步骤和说明,确保操作高效且安全[^1][^3][^5]。 #### 主要方法:使用 `git reset --hard` 这是最常见且直接的本地版本回退方式,它会彻底覆盖当前工作区、暂存区和版本库记录: 1. **查找目标提交的Commit ID** 首先,你需要确定要回退到的版本对应的Commit ID。使用以下命令查看提交历史: - `git log --pretty=oneline`:显示简洁的提交日志,每行包含完整的Commit ID和提交信息[^3][^5]。 - 或者使用git reflog:如果你已经删除了某些提交,它能显示所有操作记录(包括已删除的提交),更适合找回历史版本[^3][^5]。 示例输出: ``` e620a6ff0940a8dff91e0d252f30e4d138ec37be 最新提交 d517b5d9870f104719d351539a15e74a1382407e 目标版本 ``` 记录目标版本的Commit ID(如 `d517b5d`,取前7位即可)。 2. **执行回退命令** 使用 `git reset --hard <commit_id>` 命令回退到指定版本: - 例如,回退到Commit ID为 `d517b5d` 的版本: ```shell git reset --hard d517b5d ``` 命令执行后,工作目录、暂存区和版本库会完全恢复到该提交的状态[^1][^3][^5]。 - **快捷键**:如果回退到上一个版本,可直接用 `HEAD^`;回退到上两个版本用 `HEAD^^` 或 `HEAD~2`[^4][^5]: ```shell git reset --hard HEAD^ # 回退到上一个版本 ``` #### 示例场景 假设你意外提交了错误内容,需要回退到之前的版本: 1. 运行 `git log --pretty=oneline`,找到目标版本的Commit ID(如 `a7e1d279`)。 2. 执行命令: ```shell git reset --hard a7e1d27 ``` 完成后,本地文件会更新为目标版本的内容(例如README.md恢复到旧版本)[^3][^5]。 #### 注意事项 - **影响**:`git reset --hard` 会永久丢弃当前未提交的更改和后续提交,操作前请备份重要数据[^3][^5]。 - **仅限本地**:此方法只影响本地仓库,不会修改远程分支。如果错误提交已推送到远程,需额外处理(如强制推送 `git push -f`,但需谨慎)[^3]。 - **替代方法**:如果需要保留提交历史(如团队协作时),考虑使用 `git revert`,它会创建新提交来撤销更改,但更多用于远程分支回退[^2]。 通过以上步骤,你可以安全地在本地环境中恢复Git版本[^1][^3][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值