0


【已解决】记一次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 <[email protected]>
  • 提交时间,例如:
Date:   Mon May 2918:00:192023+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
PSE:\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
5008830feat: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
04295e7feat:9.4M       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,53insertions(+),42deletions(-)* 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,20insertions(+),2deletions(-)*5008830feat: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,21insertions(+),10deletions(-)*04295e7feat:9.4|  src/screens/ProjectList/index.tsx |11+++++++++--|  src/utils/use-async.ts            |7+++++++|2 files changed,16insertions(+),2deletions(-)* 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

待续。。。

标签: git github

本文转载自: https://blog.csdn.net/qq_32682301/article/details/129266181
版权归原作者 程序边界 所有, 如有侵权,请联系我们删除。

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

还没有评论