当前位置:   article > 正文

【已解决】记一次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
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

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

  • 删除后正常的话显示
Successfully rebased and updated refs/heads/master.
  • 1
  • 不正常的话一般就是被迫停下的第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".
  • 1
  • 2
  • 3
  • 4
  • 5

两种情况:

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

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

Successfully rebased and updated refs/heads/master.
  • 1

三、拓展学习

1.git log

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

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

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

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

常用参数

最近n条记录

git log -n

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

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

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

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

  • --after--since 功能相同。
  • --before--until 功能相同.
按作者和邮箱查看
git log --author="name"
git log --author="email"
  • 1
  • 2
  • 模糊匹配
  • 支持正则
按指定格式查看
  • 一行展示(SHA-1 校验和 + 提交说明)
git log --pretty=oneline
  • 1
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状态
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • p(相当于多次使用git show [commit_id]
  • oneline
  • short
  • medium(默认)
  • full
  • fuller
  • email
  • raw(提交ID,文件树ID,父提交ID,作者和提交者)
  • format
按指定提交内容或提交说明查看
  • -S "<string>":普通匹配
git log -S "useAsync"
  • 1
  • -G "<string>":正则匹配

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

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

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

注意:

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

其他参数:

  • -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
  • 1
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

git log --stat --oneline --graph
  • 1
* 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 +-
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 定制化格式
git log --pretty="%cn committed %h on %cd"
  • 1

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • git shortlog -s:可以用来统计每个作者的commit数量
  • git shortlog -n:可以用来对统计的量进行倒序排列

文档:Git - 查看提交历史

2.git rebase

待续。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/545786
推荐阅读
相关标签
  

闽ICP备14008679号