【已解决】记一次git删除指定的某次历史提交,并执行后续提交

这篇具有很好参考价值的文章主要介绍了【已解决】记一次git删除指定的某次历史提交,并执行后续提交。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、问题

新项目,一个分支,提交十多次后发现第二次的提交影响了项目运行,且提交量较大(请不要问为什么十多次后才发现。。。)

二、解决

  • git log:查看历史提交版本号
  • git rebase -i 【要删除提交的前一次版本号】
  • 这时显示如下,i,进入编辑模式,删除想要删除的提交记录(带pick的整行)
pick 5e6538d feat: init
pick 6797239 feat: 1
pick 760bddd feat: 2
pick 760bddd feat: 3
pick 760bddd feat: 4
pick 760bddd feat: 5
pick 760bddd feat: 6
pick 760bddd feat: 7
pick 760bddd feat: 8
pick 760bddd feat: 9

# Rebase e3c3121..760bddd onto e3c3121 (3 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

具体提交信息使用1、2、3。。代替

  • 删除后正常的话显示
Successfully rebased and updated refs/heads/master.
  • 不正常的话一般就是被迫停下的第n次修改了第二次提交的内容所在文件
error: could not apply 6fa7b3b... update lock
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".

两种情况:

  • 更改没用:git rebase --skip
  • 更改有用,处理冲突,add 后:git rebase --continue

持续按这两种情况进行操作,直到正常显示:

Successfully rebased and updated refs/heads/master.

三、拓展学习

1.git log

git log 用来查看历史提交记录,不传入任何参数的默认情况下,git log 会按时间倒序列出所有的提交记录,列出内容包括每个提交的

  • SHA-1 校验和,例如:
commit ebde2bc1e13e9e3309bca8f1f4c8f1367b4331c2 (HEAD -> master, origin/master, origin/HEAD)
  • 唯一标识此次提交(重复的可能性可以忽略不计)
  • 第一条提交记录后会标出本地所在分支
  • 作者的名字 + 电子邮件地址,例如:
Author: AImooc_iseeu <1131209806@aimooc.top>
  • 提交时间,例如:
Date:   Mon May 29 18:00:19 2023 +0800
  • 提交说明,例如:
feat: 10.1.2 使用 useCallback 解决无限渲染问题

历史较多时会只展示一部分

  • 通过回车键 Enter 或下箭头 可以往下查看
  • 空格向下翻页
  • 输入q,退出查看

常用参数

最近n条记录

git log -n

git log -5
按文件或目录查看
  • git log 文件名:查看指定文件名的历史提交记录
  • git log 目录名/:查看指定目录下文件的历史提交记录
按照日期查看

显示 2023年5月3日 之后的 commit (包含)。

git log --after="2023-5-3"
git log --since="2023-5-3"
git log --before="2023-5-3"
git log --until="2023-5-3"

日期还可以是相对日期,比如"1 week ago"和”yesterday"。

  • --after--since 功能相同。
  • --before--until 功能相同.
按作者和邮箱查看
git log --author="name"
git log --author="email"
  • 模糊匹配
  • 支持正则
按指定格式查看
  • 一行展示(SHA-1 校验和 + 提交说明)
git log --pretty=oneline
dc2227ce64f5a8cb05f3bc3cf8dfd2e7eea0a9e5 feat: 9.3 自定义 Star 组件做项目收藏标记
1dabd22132f81cf8f1d9d501bfce6701da969a32 feat: 9.2 抽象user-select组件选择用户
e3f1c34991dab267730edad65f09534a6f794202 feat: 9.1 实现id-select.tsx解决id类型 难题
63797fa1f39f486d5347c3762032982b227ed68b feat: 8.6 & 8.7 用useMemo解决依赖循环问题;完成URL状态管理
b939f13a679197463aa3d51cb6ee315ab548ef81 feat: 8.5 初步实现 useUrlQueryParam 管理 URL 参数状态(有循环渲染bug)
80b1003a68e043833b8efe01db215c953ff6a40a feat: 8.4 添加看板和任务组路由
a0bc50ceac71b870a1c1b4785d9d42fe169a90b9 feat: 8.3 添加项目列表和项目详情路由
c32479df405d617420c302ac0592df8666e6697d feat: 8.2 用 useRef 优化 useDocumentTitle
eb2f5c834233ded62b65e1ae506683bc04ae3937 feat: 8.1 用 useDocumentTitle 改变文档标题
ab288ba963146ee7af70c788484395a0a775420f feat: 7.5 实现 Error Boundaries,捕获边界错误
b5ea43574fa1e3d5a989f32f574a24577b3b5eca feat: 7.3 用 useAsync 获取用户信息,新增全屏 Loading 组件 和 全屏 Error 展示组件
e5fac1dd70adbc1eaeeae8884ac31b19cac61629 feat: 7.2 登录注册页面 Loading 和 Error 状态处理
fc01fcc7984f445a8d8b4130430829ea3e415cd1 feat: 7.2 自定义Hook-useAsync统一处理Loading和Error状态
  • p(相当于多次使用git show [commit_id]
  • oneline
  • short
  • medium(默认)
  • full
  • fuller
  • email
  • raw(提交ID,文件树ID,父提交ID,作者和提交者)
  • format
按指定提交内容或提交说明查看
  • -S "<string>":普通匹配
git log -S "useAsync"
  • -G "<string>":正则匹配

注意,前两个都是:仅显示添加或删除内容匹配指定字符串的提交

  • --grep
git log --grep "登录"

仅显示提交说明中包含指定字符串的提交。

注意:

  • 直接跟使用引号包裹的字符串即可,不用跟等号(=)
  • 默认匹配模式是区分大小写的,可以追加 -i 不区分大小写
查看某次提交以及之前的记录
git log 500883036f0d94894a565e603ed8a3543d6ba716

其他参数:

  • -p :查看提交时的补丁信息(patch的缩写)。
  • –stat :列出文件的修改行数。
  • –sortstat:只显示–stat中最后行数修改添加移除的统计。
  • –graph:以简单的图形方式列出提交记录。(绘制提交的线索,如果有合并的话,也会更清晰地显示出来)
  • –abbrev-commit:仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
  • –relative-date:使用较短的相对时间显示(“1 weeks ago”)。
  • –name-only:仅在提交信息后显示已修改的文件清单。
  • –name-status:显示新增、修改、删除的文件清单。

常用组合命令

git log --name-status --oneline
PS E:\Projects\Jira> git log --name-status --oneline
ebde2bc (HEAD -> master, origin/master, origin/HEAD) feat: 10.1.2 使用 useCallback 解决无限渲染问题
M       src/utils/http.ts
M       src/utils/project.ts
M       src/utils/use-async.ts
469b914 feat: 10.1.1 阻止在已卸载组件上赋值
M       src/screens/ProjectList/index.tsx
M       src/utils/index.ts
M       src/utils/use-async.ts
5008830 feat: 9.5 完成编辑后刷新功能
M       src/screens/ProjectList/components/List.tsx
M       src/screens/ProjectList/index.tsx
M       src/utils/project.ts
M       src/utils/use-async.ts
04295e7 feat: 9.4
M       src/screens/ProjectList/index.tsx
M       src/utils/use-async.ts
dc2227c feat: 9.3 自定义 Star 组件做项目收藏标记
A       src/components/star.tsx
M       src/context/auth-context.tsx
M       src/screens/ProjectList/components/List.tsx
M       src/screens/ProjectList/index.tsx
M       src/unauthenticated-app/login.tsx
M       src/unauthenticated-app/register.tsx
A       src/utils/project.ts
D       src/utils/use-projects.ts

git log --stat --oneline --graph
* ebde2bc (HEAD -> master, origin/master, origin/HEAD) feat: 10.1.2 使用 useCallback 解决无限渲染问题
|  src/utils/http.ts      |  8 +++--
|  src/utils/project.ts   | 11 +++---
|  src/utils/use-async.ts | 76 ++++++++++++++++++++++------------------
|  3 files changed, 53 insertions(+), 42 deletions(-)
* 469b914 feat: 10.1.1 阻止在已卸载组件上赋值
|  src/screens/ProjectList/index.tsx |  2 +-
|  src/utils/index.ts                | 16 ++++++++++++++++
|  src/utils/use-async.ts            |  4 +++-
|  3 files changed, 20 insertions(+), 2 deletions(-)
* 5008830 feat: 9.5 完成编辑后刷新功能
|  src/screens/ProjectList/components/List.tsx |  4 +++-
|  src/screens/ProjectList/index.tsx           |  9 ++++++---
|  src/utils/project.ts                        |  4 +++-
|  src/utils/use-async.ts                      | 14 +++++++++-----
|  4 files changed, 21 insertions(+), 10 deletions(-)
* 04295e7 feat: 9.4
|  src/screens/ProjectList/index.tsx | 11 +++++++++--
|  src/utils/use-async.ts            |  7 +++++++
|  2 files changed, 16 insertions(+), 2 deletions(-)
* dc2227c feat: 9.3 自定义 Star 组件做项目收藏标记
|  src/components/star.tsx                     | 17 ++++++
|  src/context/auth-context.tsx                |  2 +-
|  src/screens/ProjectList/components/List.tsx | 18 ++++++-
|  src/screens/ProjectList/index.tsx           |  2 +-
  • 定制化格式
git log --pretty="%cn committed %h on %cd"

AImooc_iseeu committed ebde2bc on Mon May 29 18:49:45 2023 +0800
AImooc_iseeu committed 469b914 on Mon May 29 18:00:19 2023 +0800
AImooc_iseeu committed 5008830 on Fri May 26 19:51:12 2023 +0800
AImooc_iseeu committed 04295e7 on Fri May 26 18:33:50 2023 +0800
AImooc_iseeu committed dc2227c on Thu May 25 18:38:36 2023 +0800
AImooc_iseeu committed 1dabd22 on Wed May 24 18:23:06 2023 +0800
AImooc_iseeu committed e3f1c34 on Wed May 24 10:09:38 2023 +0800
AImooc_iseeu committed 63797fa on Tue May 23 18:49:53 2023 +0800
AImooc_iseeu committed b939f13 on Fri May 19 18:37:37 2023 +0800

(3) 其他相关命令

  • git show (= git log -p -1
  • git shortlog(正序输出汇总信息,以作者进行分类)
15532312345 (1):
      Initial commit

AImooc_iseeu (56):
      init
      update lock
      update tsconfig.baseUrl
      add npm prettier
      add .prettierrc.json
      add .prettierignore
      add npm husky & lint-staged
      add npm eslint-config-prettier
      add commitlint.config.js
      del 6
      recommit
      feat: add commit-msg
      feat: add json-server config & db.json
      feat: add projectList
      feat: add env
  • git shortlog -s:可以用来统计每个作者的commit数量
  • git shortlog -n:可以用来对统计的量进行倒序排列

文档:Git - 查看提交历史

2.git rebase

待续。。。文章来源地址https://www.toymoban.com/news/detail-470774.html

到了这里,关于【已解决】记一次git删除指定的某次历史提交,并执行后续提交的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git 删除某一次的提交(commit)

    突然有同学问怎么删除指定的提交,其他的保持不变。 大致的意思就是我先提交的是a,又提交了b,c是我最近的一次提交。然后项目变动,b的这次改动不需要提交了,怎么把b的这次commit去掉,还不影响c。百度即可得到想要的答案。 下面我总结起来,以备不时之需。 最主要

    2024年02月03日
    浏览(59)
  • 记一次git冲突解决

    在提交mr的时候突然遇到了conflict,这时候意识到没有及时pull代码,脑海中想起了隔壁一起入职的同事经常念叨的一句“每天早上来都pull一下代码”。但是已经迟了 我看了一下,主要是同一个文件,master分支上已经被修改过,然后我要mr的代码也在这个文件上进行了修改。因

    2024年02月05日
    浏览(40)
  • git 撤销中间某次提交,保留其他提交的方法

    今天上班脑抽了,吧test直接合到了uat,因为项目近期就我一个人开发,自己拉个三个分支再改不同的东西,最后都是发到test分支发测试,发生产的时候一个个和嫌麻烦,直接吧test分支怼到了uat,结果生产就出问题了,之前同事改的代码合了test,但是还没改完,不能上生产,

    2024年02月12日
    浏览(42)
  • Git查询某次提交属于哪个分支

    在Android studio左下角,可以看到所有提交信息。 选中某一次提交信息,右键,选择“Copy Revision Number”,如下图: 打开Android studio的Terminal,输入 git branch --contains c532f4f59291808b7cc018bceb9fa275e4bbd6f4 --all ,中间的那串数字是commit ID,替换成你自己的。等一会儿,就会显示这次提交

    2024年02月12日
    浏览(56)
  • [git] 记一次git lfs拉取失败解决过程

    之前在Unity做了一个小demo,用unity的.gitignore的模板和自家工程的.gitattribute模板,加了lfs上传了,后续其它同学下载我的demo的时候出现了prefabs和fbx丢失的问题 一开始发现好像是lfs没有自动拉取并析出,同学使用git lfs pull 解决了部分fbx的问题,仍然有几个prefabs是丢失状态,后

    2024年04月15日
    浏览(43)
  • git 如何撤销某次远程仓库的提交

    要撤销某次远程仓库的提交,可以按照以下步骤操作: 首先使用 git log 命令查看需要撤销的提交的 SHA-1 值。例如: 上面的 git log 输出显示两个提交,其中最新的提交是一个被称为“revert commit”的提交,它用于撤销另一个提交(即前一个提交)。 使用 git revert 命令来创建一

    2024年02月11日
    浏览(51)
  • 解决问题:如何在 Git 中查看提交历史

            可以使用以下命令查看 Git 中的提交历史:         这将显示当前分支上的所有提交历史。每个提交的输出包括提交哈希(SHA-1 值)、作者、日期和提交注释。         您也可以添加一些选项,以获取更详细的提交历史: --oneline 显示单行提交消息 --graph 显

    2024年02月11日
    浏览(39)
  • git把一个分支上的某次提交同步到另一个分支上

    如果你需要把一个分支上的某次修改的提交记录合并到另外一个分支上,很简单: 1、可以使用git log 命令 或去gitlab界面找   commit的ID号,比如 aabb4d0203 2、切换到目标分支上(即在要合并到的分支上),执行命令: 就会挑拣出这次提交中的文件信息. 备注: 如果要取消这次 c

    2024年02月04日
    浏览(42)
  • 记一次fineBI的增量删除更新BUG

    官方文档链接是https://help.fanruan.com/finebi/doc-view-1663.html 按照官方文档,增量删除不能使用select * ,且需要指定分区建 但实际指定分区键有时候也会报错,因为表设置的字段有时候会比数据源少,此时会报错,提示缺少字段xxx,但select 字段增加xxx后也是无效的,即便点击预览

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包