Git之revert的使用

问题场景:

提交代码都是以merge request的形式合并到主分支master的。  由于有一个merge request被误merge了,这期间又有同时merge了其它内容。 如何快速将这个被误merge的request从master上revert呢?

实例演示:

下面是最近的5次提交记录,这时第3提交有错误,需要撤回这次提交。

方法一:intellj中的操作

1. 基于master创建一个新的分支用于revert,切换到该分支

2. 执行命令:

git log --oneline   //查看commit id
git revert  6274264

  因为 revert 会生成一条新的提交记录,这时会让你编辑提交信息,编辑完后 :wq 保存退出就好了。

保存之后,我们再来看当前提交的记录

git log --oneline   //查看commit id
git show 1ccafe6   //查看1ccafe6提交了什么内容

最后创建merge request。

 方法二:git网页中操作

到repository, 查看master分支的His

<think>我们被要求详细解释`gitrevert`命令的使用方法,并可能涉及相关的命名规范。根据引用[3]的内容,我们知道该文档涵盖了Git命令大全和提交信息规范,因此我们可以从中提取相关信息。###`gitrevert`命令详解`gitrevert`用于撤销一个已存在的提交,但它不是通过删除该提交来实现,而是创建一个新的提交来反转(撤销)指定提交的更改。这种方式不会改变项目历史,因此适合在公共分支(如master或develop)上使用,因为它不会破坏协作。####基本用法:```bash#撤销单个提交gitrevert<commit-id>#撤销连续的多个提交(注意:顺序是倒序,即先撤销较新的提交)gitrevert<旧commit-id>..<新commit-id>#注意:左开右闭区间,不包含旧commit-id,包含新commit-id#如果需要包含旧commit-id,则使用gitrevert<旧commit-id>^..<新commit-id>#使用^表示包含旧commit-id#撤销提交时允许编辑提交信息(默认会打开编辑器)gitrevert-e<commit-id>#撤销提交但不自动提交,允许用户自己提交(这样可以进行更多修改)gitrevert-n<commit-id>#或--no-commit```####注意事项:1.**冲突处理**:如果撤销的更改与当前分支的后续修改有冲突,Git会提示你解决冲突。解决冲突后,使用`gitadd`标记冲突已解决,然后使用`gitrevert--continue`继续。如果想取消撤销操作,使用`gitrevert--abort`。2.**撤销合并提交**:撤销合并提交需要指定主父分支(通常使用`-m1`选项,其中1表示保留合并提交的第一个父分支的更改,2表示第二个)。```bashgitrevert-m1<merge-commit-id>```3.**提交信息规范**:在团队协作中,遵循一致的提交信息规范很重要。`gitrevert`默认生成的提交信息为“Revert"原提交信息"”,如果原提交信息符合规范,则生成的也符合。但有时可能需要修改,可以使用`-e`选项编辑。####提交信息规范参考(根据引用[4]):-提交信息应清晰、简洁,说明做了什么以及为什么做。-常见格式(如Angular规范):```<type>(<scope>):<subject><空行><body><空行><footer>```-`type`:提交类型(如feat,fix,docs,style,refactor,test,chore等)-`scope`:影响范围(可选)-`subject`:简短描述-`body`:详细描述(可选)-`footer`:关闭issue或BREAKINGCHANGE等(可选)在`gitrevert`中,生成的提交类型通常是`revert`,例如:```revert:fix(login):handlenullpointerexceptionThisrevertscommit1234567890abcdef.Reason:Thefixcausedaregressioninuserauthentication.```###示例操作流程:假设我们有一个提交`a1b2c3d`引入了bug,现在需要撤销它:1.执行撤销命令:```bashgitreverta1b2c3d```2.如果出现冲突,解决冲突后:```bashgitadd.#添加解决后的文件gitrevert--continue```3.如果没有冲突(或解决冲突后),会打开编辑器编辑提交信息。默认信息为“Revert"原提交信息"”,可以修改补充原因。4.推送到远程:```bashgitpushorigin<branch-name>```###总结:-`gitrevert`是安全撤销公共分支提交的首选方法。-遵循团队的提交信息规范,确保撤销提交的信息清晰。-处理冲突是常见步骤,需按提示操作。§§相关问题§§1.`gitrevert`和`gitreset`有什么区别?2.如何撤销一个合并提交(mergecommit)?3.在`gitrevert`过程中如何解决冲突?4.如何修改`gitrevert`生成的提交信息?</think>### Git Revert 命令详解及规范指南 #### 一、`git revert` 核心用法 `git revert` 用于安全撤销指定提交的修改,**保留完整历史记录**,适合公共分支协作场景: ```bash # 1. 查找要撤销的 commit ID git log --oneline # 2. 执行撤销操作(撤销单个提交) git revert <commit-id> # 示例: git revert dcd2bb4 # 3. 解决可能的冲突(如有) # 手动编辑冲突文件 → git add <file> → git revert --continue # 4. 推送变更 git push origin <branch-name> ``` #### 二、高级用法 1. **撤销连续多个提交**: ```bash # 撤销从 commitA 到 commitB 的所有提交(不包含 commitA) git revert <commitA>..<commitB> ``` 2. **撤销合并提交**: ```bash # 指定主分支方向(-m 1 表示保留主分支历史) git revert -m 1 <merge-commit-id> ``` 3. **无冲突自动提交**: ```bash # 跳过编辑提交信息(使用自动生成的revert信息) git revert --no-edit <commit-id> ``` #### 三、提交信息规范(依据引用[4]) 撤销提交时需遵守团队约定,推荐格式: ``` revert: [原提交类型] 简要描述 • 说明撤销原因(如:引发XX问题/需求变更) • 关联原始提交ID:Refs: <原commit-id> • 关联任务追踪号:Closes #JIRA-123 示例: revert: fix(login): remove password validation This reverts commit dcd2bb4 due to regressions in legacy systems. Refs: dcd2bb401a Closes #PROJ-456 ``` **关键元素**: - 前缀 `revert:` 明确操作类型 - 保留原提交的类型标记(如 `fix`, `feat`) - 说明撤销原因和影响范围 - 关联原始提交和任务追踪号 #### 四、操作注意事项 1. **冲突处理流程**: ```mermaid graph LR A[git revert] --> B{冲突?} B -->|是| C[手动解决冲突] C --> D[git add 文件] D --> E[git revert --continue] B -->|否| F[自动提交] ``` 2. **撤销规则**: - 每次 `revert` 生成**新提交**,历史记录完整可追溯 - 可撤销任意历史提交(包括合并提交) - 避免撤销已发布的公共提交(优先用 revert 而非 reset) 3. **查看撤销影响**: ```bash git show <revert-commit-id> # 检查撤销内容 git diff HEAD~1..HEAD # 比较撤销前后差异 ``` > 最佳实践:在功能分支测试 `revert` 后再合并到主分支,减少冲突风险[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值