git revert

devtools/2024/12/28 20:53:16/

git revert 是 Git 中的一个命令,用于创建一个新的提交,该提交会撤销(或“反转”)之前某个特定提交所做的更改。这个命令非常有用,因为它允许你在不改变项目历史的情况下,撤销某个提交的更改效果。
在这里插入图片描述
git revert之后
在这里插入图片描述

git_revert__5">使用 git revert 的场景

当你发现某个提交引入了错误或不需要的更改时,你可以使用 git revert 来撤销这些更改。
在协作项目中,如果你需要撤销其他开发者的提交,而又不希望破坏项目的提交历史,git revert 是一个很好的选择。

git_revert_10">如何使用 git revert

‌找到要撤销的提交的哈希值‌:
使用 git log 命令查看项目的提交历史,并找到你想要撤销的提交的哈希值(通常是一个长字符串,如 abc1234…)。

‌执行 git revert 命令‌:
在终端或命令行中,输入以下命令:

git revert <commit-hash>

将 替换为你要撤销的提交的哈希值。

‌解决冲突(如果有)‌:
如果撤销的提交与其他提交有冲突,Git 会提示你解决这些冲突。按照通常的方式解决冲突,然后使用 git add 命令将解决后的文件标记为已解决。

‌完成撤销‌:
如果一切顺利,Git 会自动创建一个新的提交来撤销之前的提交。这个新提交会包含对原始提交更改的反向更改。

注意事项
‌撤销合并提交‌:如果你要撤销的是一个合并提交(merge commit),你可能需要使用 -m 1 选项来指定撤销哪个父提交。合并提交有两个父提交,-m 1 告诉 Git 撤销第一个父提交(通常是主线上的提交)。
‌保持历史清晰‌:使用 git revert 而不是 git reset 来撤销提交,因为 git revert 会保留项目的历史记录,使得每次更改的来源和原因都可追溯。

基本写法如下:

git revert <commit-hash>

其中, 是你想要撤销的提交的哈希值(也称为提交ID或SHA-1)。你可以通过 git log 命令查看项目的提交历史,并找到对应的哈希值。

示例
假设你有一个提交,其哈希值为 abc1234567890abcdef1234567890abcdef12345678(实际哈希值会更长或更短,取决于Git的配置),你可以使用以下命令来撤销这个提交:

git revert abc1234567890abcdef1234567890abcdef12345678

通常,你只需要输入哈希值的前几个字符(只要它们是唯一的),Git就能识别出完整的提交。所以,如果 abc1234 是唯一的,你也可以这样写:

git revert abc1234

撤销合并提交

如果你要撤销的是一个合并提交(merge commit),你可能需要指定哪个父提交应该被撤销。合并提交有两个父提交(一个来自合并前的分支,另一个来自被合并的分支)。在这种情况下,你可以使用 -m 选项,后面跟着一个数字 1 或 2 来指定父提交。例如:

git revert -m 1 <merge-commit-hash>

这将撤销合并提交中第一个父提交(通常是主线上的提交)的更改。

其他选项

git revert 命令还有一些其他选项,比如:

–no-commit:在撤销更改后不自动创建提交,允许你在撤销多个提交或进行其他更改后再统一提交。
–edit:在创建撤销提交之前打开编辑器,允许你修改提交消息。

在使用 git revert 命令时,你可以结合使用 --no-commit 和 --edit 选项来实现更细粒度的控制。以下是这些选项的写法:

–no-commit
–no-commit 选项告诉 Git 在撤销更改后不自动创建新的提交。这允许你在撤销多个提交或进行其他更改后,再统一进行提交。

git revert <commit-hash> --no-commit

例如:

git revert abc1234 --no-commit

在这个例子中,Git 会撤销 abc1234 这个提交的更改,但不会立即创建新的提交。你可以继续执行其他操作,比如撤销更多的提交,然后在准备好后使用 git commit 命令手动创建一个新的提交。
–edit
–edit 选项允许你在撤销提交之前打开文本编辑器,以便你可以修改默认的提交消息。这对于提供更详细的撤销原因或调整提交消息格式非常有用。

git revert <commit-hash> --edit

例如:

git revert abc1234 --edit

在这个例子中,Git 会打开你配置的文本编辑器,并显示一个默认的撤销提交消息。你可以编辑这个消息,添加更多信息或进行其他更改,然后保存并关闭编辑器。Git 将会使用你编辑后的消息来创建新的撤销提交。

结合使用
你还可以将 --no-commit 和 --edit 选项结合起来使用,以便在撤销更改后不立即提交,并且能够在提交之前编辑提交消息。

git revert <commit-hash> --no-commit --edit

例如:

git revert abc1234 --no-commit --edit

在这个例子中,Git 会撤销 abc1234 这个提交的更改,打开文本编辑器让你编辑提交消息,但不会立即创建新的提交。你可以在编辑器中修改消息,保存并关闭编辑器,然后继续执行其他操作,比如撤销更多的提交,最后使用 git commit 命令手动创建一个新的提交。

请注意,在使用 --no-commit 选项时,你需要记得在准备好后手动提交更改,否则你的撤销操作将不会记录在项目的历史中。

注意事项
在撤销提交之前,最好先确保你的工作区是干净的(即没有未提交的更改)。
撤销提交会创建一个新的提交,因此它会改变项目的历史记录,但这种改变是“向前”的,不会破坏之前的提交历史。
在协作项目中,撤销公共分支上的提交可能会对其他开发者造成影响,因此在进行此类操作前最好与团队成员沟通。


http://www.ppmy.cn/devtools/146200.html

相关文章

【乐企文件生成工程】根据特定要素动态选择需要生成的发票板式文件实现

乐企版式文件生成工程,涉及到多个票种,不乏特殊票种的生成,如果每个特殊票种都单独写逻辑,那整个代码写起来体量就不得了,如何实现代码逻辑的同时也更优雅的实现代码扩展性呢,您接着往下看。 使用设计模式 工厂模式 1、定义接口InvoiceFileService public interface Inv…

2025.01.15python商业数据分析

# # 一、 导入项目 import pandas as pd# # # 文件路径为python文件位置下的相对路径 dwx pd.read_excel("电商案例数据及数据说明/驱虫剂市场/电蚊香套装市场近三年交易额.xlsx", ) fmfz pd.read_excel("电商案例数据及数据说明/驱虫剂市场/防霉防蛀片市场近…

StarRocks 排查单副本表

文章目录 StarRocks 排查单副本表 方式1 查询元数据&#xff0c;检查分区级的副本数方式2 SHOW PARTITIONS命令查看 ReplicationNum修改副本数命令 StarRocks 排查单副本表 方式1 查询元数据&#xff0c;检查分区级的副本数 # 方式一 查询元数据&#xff0c;检查分区级的副…

详解VHDL如何编写Testbench

1.概述 仿真测试平台文件(Testbench)是可以用来验证所设计的硬件模型正确性的 VHDL模型&#xff0c;它为所测试的元件提供了激励信号&#xff0c;可以以波形的方式显示仿真结果或把测试结果存储到文件中。这里所说的激励信号可以直接集成在测试平台文件中&#xff0c;也可以从…

bash脚本观察程序状态

script % touch proc.sh script % chmod 755 proc.shproc.sh: #!/usr/bin/env bashSTATUS0if [ -z $1 ];then # 检查是否传了PID参数echo please enter a PIDexit 1 fiecho watching PID $1while [ $STATUS -eq 0 ] # 如果是我们初始的值&#xff0c;说明程序的状态还没有改变…

JAVA代理模式和适配器模式

文章目录 Java 代理模式和适配器模式代理模式&#xff08;Proxy Pattern&#xff09;适配器模式&#xff08;Adapter Pattern&#xff09;代理模式和适配器模式的区别 代理模式的使用举例静态代理实现:用代理模式记录方法调用日志动态代理实现:使用 Java 动态代理记录方法调用日…

LabVIEW软件项目设计方案如何制定

制定LabVIEW软件项目设计方案需要综合考虑需求分析、架构设计、功能模块划分和时间预算等多个方面&#xff0c;确保项目开发过程高效、可控且最终满足目标要求。以下是一个详细的制定流程&#xff1a; ​ 1. 需求分析 目标定义&#xff1a;明确项目的目标&#xff0c;例如数据采…

计算属性 简写和 完整写法

计算属性渲染不加上括号 methods方法和computed属性区别&#xff1a; computed只计算一次&#xff0c;然后缓存&#xff0c;后续直接拿出来使用&#xff0c;而methods每次使用每次计算&#xff0c;不会缓存 计算属性完整写法&#xff1a; 既获取又设置 slice 截取 成绩案例 …