前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >git commit回滚

git commit回滚

作者头像
艳龙
发布于 2021-12-16 09:29:59
发布于 2021-12-16 09:29:59
8.9K00
代码可运行
举报
文章被收录于专栏:yanlongli_艳龙yanlongli_艳龙
运行总次数:0
代码可运行

从svn 迁移到 git,已经有很长时间。git 的基本命令已经可以说是熟练的掌握,能够满足日常的开发。想了解常用git命令可以查看: 常用git命令

但是也有一些不常用,但在关键时刻又非常有用的命令,这里就介绍一种:撤销已经提交的commit

1. 应用场景 :

撤销已经提交的commit

2. 解决方案:

  1. 使用 git reset --hard HEAD^
  2. 使用 git rebase -i HEAD~n

下面分别介绍下这两个方案有什么不同,和他们的使用场景 。

2.1 git reset --hard 丢弃最新的提交

代码提交后,需求发生变化导致之前提交的已经不合适,或者 代码提交后发现有严重bug,需要回滚可是使用这个命令:

git reset --hard HEAD^

tips:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1HEAD^   表示 最新提交HEAD位置往回数一个提交, 几个 ^  就往回数几个提交;

2HEAD~n  表示 新提交HEAD位置往回数n个提交

可以发现,reset 命令只能回滚最新的提交。

如果最后一次commit需要保留,而只想回滚之前的某次commit,reset命令可能就无法满足了。(这个场景我第一次遇到的时候很是抓瞎)

2.2 git rebase -i 丢弃指定提交

针对想撤销中间某次commit的情况,可以使用如下的命令:

git rebase -i HEAD~2

tips:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1`rebase -i``rebase --interactive` 的缩写;
2,  `git rebase -i` 不仅可以删除commit, 还可以修改commit。 具体的可以查看rebase 中提示的参数

输入git rebase -i HEAD~2命令后,会出现一个编辑页面如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git rebase -i HEAD~2

drop e47fa58 提交11
pick 338955c 提交12

# Rebase 7f83da3..338955c onto 7f83da3 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
~      

编辑界面能够执行的操作,都有罗列出来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`edit: 使用本次提交,在rebase到这次提交时候,会暂停下来等待修正`
`pick:使用本次提交,不操作修改`
`drop:删除这次提交`
`...`

这里的目标是删除倒数第二个提交,所以将倒数第二个提交前面修改为drop, 然后退出编辑界面就可以了。

再通过 git log 查看提交历史的时候,就会发现e47fa58 的提交记录已经不见了。

总结:

  1. 回滚最新的提交 :git resetgit rebase 命令都可以
  2. 回滚中间某次提交: git rebase 可以, git reset 不可以
  3. 如果提交已经同步到远程仓库,需要使用git push origin -f branch(分支名) 来将回滚也同步到远程仓库(master 分支谨慎使用 -f)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/7 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
git的面试题_es面试题
新增文件的命令:git add file或者git add . 提交文件的命令:git commit –m或者git commit –a 查看工作区状况:git status –s 拉取合并远程分支的操作:git fetch/git merge或者git pull 查看提交记录命令:git reflog
全栈程序员站长
2022/08/03
7680
git 修改倒数二个提交
之前有介绍 commit --amend , 通过这个命令可以修改最新的commit提交。 还不了解的可以查看git 修改最后一次commit 文章
艳龙
2021/12/16
5390
如何维持整洁的 Git 提交记录?送你三个锦囊!
背景 大家都有学习如何规范简洁的编写代码,但却很少学习如何规范简洁的提交代码。现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 workflow 来提交/合并 code,这种灵活性把控不好,也会带来很多问题 最常见的问题就是乱成一团的 git log history,那真的是老太太的裹脚布, 又臭又长, 个人极其不喜欢这种 log 造成这个问题的根本原因就是随意提交代码。 代码都提交了,那还有什么办法拯救吗?三个锦囊,就可以完美解决了 如果您正在学习Spring C
程序猿DD
2023/04/04
3670
如何维持整洁的 Git 提交记录?送你三个锦囊!
【linux命令讲解大全】013.Git:分布式版本控制系统的先驱和常用命令清单(二)
我还遇到了如下面错误,lab默认给master分支加了保护,不允许强制覆盖。Project(项目)->Setting->Repository 菜单下面的Protected branches把master的保护去掉就可以了。修改完之后,建议把master的保护再加回来,毕竟强推不是件好事。
全栈若城
2024/03/02
1030
Git 实用技巧记录,看这篇你就明白了!
如果我们希望能够快速了解或体验一下 Git 的操作的话,我这里推荐搭建前往这个网站进行学习,其不需要我们安装工具,而且我们的每一步操作都可以在右侧实时看到状态,对于我们学习和理解 Git 工作方式和原理非常有帮助的。—— 欢迎光临 => https://oschina.gitee.io/learn-git-branching/
小明互联网技术分享社区
2021/11/12
4610
Git——常用命令总结
思索
2024/08/14
1060
Git 合并多个 commit,保持历史简洁
开发过程中,本地通常会有无数次 commit ,可以合并“相同功能”的多个 commit,以保持历史的简洁。
叨叨软件测试
2020/09/01
147.4K0
这才是真正的Git——Git实用技巧
作者:lzaneli,腾讯 TEG 前端开发工程师 本篇是这个系列的最后一篇文章,之前的文章主要讲的是基础原理部分(见上方专辑),在理解原理的基础上,介绍一些实用的技巧给大家,希望能提高大家的开发效率。 这篇文章因为更多的是列举实际应用的技巧,所以文章结构会显得散乱一些,也不会像前两篇文章那样要求大家顺序阅读。每个点都是互相独立的,大家可以根据自己的需要学习。 在这篇文章里我会使用操作录屏的方式来介绍例子,希望这种方式可以让你更直观的了解命令的使用方法。 将几个commit压缩成一个 ⚠️ 这里有
腾讯技术工程官方号
2020/08/24
7630
【Git】修改已经提交的commit内容
通过 Git 进行版本管理时,对于已经提交但没有 push 的 message 信息,发现提交信息填写错误后,如何进行修改? 对于已经 push 的 message 信息如何修改?通过git rebase -i进行分支管理,以及重新操作已经提交的分支信息[reword,edit,squash 等]。此次用到的主要是reword修改已经提交的message信息。
程序小工
2018/09/12
9.6K1
玩不转的 GitHub (一)
写这篇并不是详细的去写一下关于版本控制和 Git 使用的详细教程,而是整理一下 Git 入门、GitHub 常规使用、Gitee 常规使用以及在工作中常见的一些操作。
双鬼带单
2021/07/20
4910
45个 GIT 经典操作场景,专治不会合代码
git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和一些需彰显个人实力的场景,仍然需要我们掌握足够多的git命令。
程序员小富
2022/03/04
1.8K0
45个 GIT 经典操作场景,专治不会合代码
Git 不同情况下的回滚操作
在未进行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将“本地仓库”的代码还原操作叫做“撤销”
JS菌
2019/04/10
5550
git 更新历史提交
有时候我们在git commit后才发现,之前的一些提交有些问题,比如有些代码忘提交了或者有一些typo需要修改。如果要修改的地方是需要添加到最后一次提交上的,那么可以参考我的这篇博文修改,如果是在非最后一次提交上的,那么就需要用git rebase来操作。这里简单记录一下操作的过程。
王云峰
2023/10/23
2720
Git 使用记录 - 各种撤销
以上操作用于撤销保存在工作区修改,但是不会撤销暂存区中的修改。 由于修改还没记录到 git 中,撤销无法恢复,请慎重!
orientlu
2018/09/13
1.2K0
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
上篇博客聊了《git分支管理之rebase 以及 cherry-pick相关操作》本篇博客我们就以Learning Git中的关卡进行展开。下方列举了LearningGit中的 merge、rebase、reset、revert、cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析。后边在聊交互式rebase操作是,不单单给出了LearningGit中的内容,而且给出了真正的Git分支在交互式rebase操作时的具体案例。 learngitbranching的地址为:https://l
lizelu
2018/03/28
13.4K0
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
日常开发过程中实际场景下使用git的一些简单总结
公司内部有代码仓库和 github 仓库邮箱不一致。例如已经全局配置了公司内的信息
ACK
2020/05/26
4640
Git入门到高级系列2-git高级操作
项目分支就是版本库的一个副本,有了分支后可以把你的工作从开发主线上分离开来, 以免影响开发主线。
老马
2019/05/25
1.3K0
姐姐问我什么是变基操作(git-rebase)
话说,我和姐姐的缘分是在那一个月黑风高的晚上,啪,姐姐一巴掌打在了我的脸上并说了一句:能不能讲重点~~~。哈哈,不开玩笑了,直接说重点吧。我们先来看一个场景,我查看了一下我github上的个人仓库,commit提交次数很多,提交内容如下:
Golang梦工厂
2022/07/08
6350
姐姐问我什么是变基操作(git-rebase)
关于 Git 重写提交历史的一些笔记
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
3930
十分钟了解 git 那些 “不常用” 命令
链接:https://segmentfault.com/a/1190000022107836
好好学java
2020/03/31
4950
相关推荐
git的面试题_es面试题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文