如何修改git记录
如何修改git记录
其实git官方也做了比较详细的介绍
地址为: Git-工具-重写历史
基本操作流程
例如,本地git有这么六次提交记录
代表节点的字符串 | 提交信息 |
---|---|
8a766b3 | a |
6a09a8a | b |
7d5137d | c |
3b26bcc | alter c |
39fab54 | d |
b0f4037 | delete zip |
可以看见提交依次为:a,b,c,alter c,d,delete zip
开始变基
git rebase -i HEAD~6
从最近第六次提交开始变基。会出现编辑器展示todo list,内容如下
pick 8a766b3 a
pick 6a09a8a b
pick 7d5137d c
pick 3b26bcc alter c
pick 39fab54 d
pick b0f4037 delete zip
根据实际情况 制定变基的 todo list
例如,我们想做如下需求:
- "a","b","c","d"提交留下
- "alter c" 合并到 "c"
- 删除 "delete zip" 提交留下
- 新增 在 "a" 提交后 添加 "E" 提交
那么我们应该调整todo list为:
pick 8a766b3 a
edit 6a09a8a b
pick 7d5137d c
squash 3b26bcc alter c
pick 39fab54 d
# 使用 drop 或者直接删除改行都可以
drop b0f4037 delete zip
放弃当前变基
放弃变基,变基过程中发现弄错了,可以放弃重来
git rebase --abort
修改变基操作中 剩余的 todo list
git rebase --edit-todo
完成当前节点的修改,继续变基 todo list的下一个交互动作
git rebase --continue
如果 下一个交互动作是 "pick",那么会自动执行(不需要交互),直到执行到下一个 "edit"、"squash"等 非 "pick" 动作
修改当前提交
当变基执行到 "edit" 动作时,会停到下来继续交互,例如:
edit 6a09a8a b
那么会停到 节点 6a09a8a 已经提交的 git状态
此时,你可以修改文件,然后使用
git commit --amend
命令修改 git 提交内容 已经提交信息。
确定完成后,使用git rebase --continue
进行下一个动作
变基完成
直到看见"Successfully rebased and updated refs/heads/master" 字样的信息,说明 rebase 的 todo list全部完成,rebase变基结束。你本地的git 提交记录也就修改完成了
拆分一次提交为 2次或者多次提交
例如有提交记录如下:
代表节点的字符串 | 提交信息 |
---|---|
2a25f2a | a |
06824cf | b and c |
389efb8 | d |
4d59d17 | e |
开始变基,从最近4次提交开始
git rebase -i HEAD~4
列举变基 todo list
如下:
pick 2a25f2a a
edit 06824cf b and c
pick 389efb8 d
pick 4d59d17 e
保存
保存变基 todo list,由于2a25f2a 是 pick 自动跳过交互,所以第一个要交互处理的就是 06824cf "b and c"
文件状态直接变成 06824cf 提交后的状态
拆分一次提交为二次提交
进行:
git reset HEAD^
运行后,git 节点退到 2a25f2a,而b文件 和 c文件 从已提交到本地git状态 变成 未提交(也没有放入缓存区)
此时git status 会发现b文件 和 c文件 属于 Untracked files
# 提交 b记录
git add b文件
git commit -m "b"
# 提交 c记录
git add c文件
git commit -m "c"
完成当前交互动作:
git rebase --continue
出现 "Successfully rebased and updated refs/heads/master"
查看提交记录,完成!
解释 git reset HEAD^
刚才的操作使用到命令git reset HEAD^
HEAD^ 其实就是指当前HEAD的上一个提交节点
该命令默认有3中模式
1.--soft 文件不变,但是原来最后一次提交的文件从已提交 变成 放在缓存区
2.--mixed (默认) 文件不变,但是原来最后一次提交的文件从已提交 变成 还未放在缓存区
3.--hard 文件改变, 删除原来最后一次提交 所有的文件修改信息
相关帖子
这个帖子和我说的差不多
https://blog.csdn.net/qq_32746457/article/details/145027633