开发工具: git 10、对本地不规范的提交历史进行修改和调整

1.对上一次commit的备注或者代码进行修改

比如张三刚刚执行了一个不规范的commit备注
25
26
修改提交备注:

git commit --amend

27
通过该命令直接就可以修改上一个 commit 的备注信息,补充更多的提交说明。相当于是将上一个 commit 删除掉,然后基于上一个 commit 对应的代码重新构建一个 commit object。

修改后直接通过 git log 查看结果
28
可以发现之前的 SHA-1 值没了,在 “完成部门管理” 这个 commit 上面重新构建了一个 commit object

2.对上一次commit加入几行遗漏的代码

比如张三刚执行了一个 commit,结果扫了一眼代码发现今天忘记修改几行代码了,需要修改之后补充到上一个 commit 中去。也可以通过该命令来实现。

首先修改代码,然后加入暂存区,然后再次执行
29
3031
会发现之前的 commit object 也被删除了,构建了一个新的 commit object

查看最近2次的代码差异
32

3.对历史上的多个commit进行修改

比如张三可能在本地连续几天都提交了几个 commit,但是一直忘了 push 到远程仓库。突然有一天需要将这个几天的 commit 一次性 push 到远程仓库,但是又发现了 3 天前的某个 commit 备注不规范,需要调整一下。

#该命令只能针对本地最近一次commit去修复
git commit --amend
#调整本地最近3个commit
git rebase -i HEAD~3

张三最近 2 次 commit 都不规范
33
执行如下命令,进入修改界面

git rebase -i head~2

34
将需要调整的commit之前的pick修改为edit,然后保存退出,此时工作区的代码:
35
执行git commit --amend修改备注。修改完后执行

git rebase --continue

前进到 242f207 的 commit object。可以看到此时的指针是 feature/002 rebase -i 2/2 以及其工作区的状态。
36

再进行 git commit --amend 修改备注后,继续执行 git rebase --continue,此时的指针指向了 feature/002 分支,说明需要进的修改已经全部完毕。
37
最后的日志结果:
38
通过 git rebase --continuegit commit --amend,最终会将设置为 edit 的那几个 commit 都修改完毕。

4.对几天前的commit加入代码

如果要对前几天的某个 commit 加入更多的代码,也可以这样做。

git rebase -i head~x,选择要修改的 commit,将其从 pick 修改为 edit

然后修改代码,加入暂存区,接着 git commit --amnend,修改 commit 备注,即可以加入代码。或者是直接执行 git commit --amend,修改备注即可。

比如要对 b70b226 的 commit object 的代码进行修改
39

git rebase -i head~7

将其从 pick 改为 edit,修改后保存退出
40
此时的工作区将还原到当时的代码
41
对代码进行修改:
42
加入暂存区后修改备注:
43
44
查看日志
45

修改成功!

一般是不予许对前几天的 commit 加入代码的,除非是特例

比如说3天前些好的某个功能,忘了加一些非核心的代码,如日志代码,监控代码等,那么可以加入这些代码

5.删除commit以及调整commit的顺序

这个场景存在于比如说偶尔不小心加了一个空行,最后提交了,此时是需要将那个不规范的 commit 给删除掉(如果公司有 git提交规范)。

不小心 commit 了一个不规范的备注
46
之后又在空行的这行写入了其他代码
47
此时的 git log:
48
要删除不规范的 commit 备注,先 rebase 到该 commit
50
需要解决冲突,此时的工作区代码:
51
解决冲突:
52
git add --all .git commit -m “解决冲突”,查看日志
53
会发现不规范的 commit 已经被删除了

6.将多个commit合并为一个commit

push 到远程仓库之前要将今天的多个 commit 合并在一起的。因为一般一天只能有一个 commit

比如第一个 commit
54

第二个comit:
55
56

git rebase -i head~2

进入编辑页面,将 pick 改为 squash
57
保存后退出
58
根据提示,应该包含前面 3 个而不是 2 个

# 先撤销
git rebase --abort

# 再次进入编辑页面
git rebase -i head~3

59
保存后将自动进入编辑页面,然后将 commit 备注全部重新写一个 commit60
查看今天和commit和昨天的commit之间的差异61

注意:如果要合并多个commit,那么一定要往前多选择一个commit

7.将一个commit切分为多个commit

比如说你好几天没有合并代码,然后突然有天不小心将3天修改的代码都合并成了一个 commit 了,此时木已成舟,没法用 git add -i 来多次 commit 了。这时就需要将这个 commit 拆分为多个 commit,还是在上面那个界面,将要拆分开来的 commit 前面的指令,修改为edit然后你就会回到那个 commit 对应的版本,此时执行 git reset HEAD^,此时会直接回退到之前的状态,然后此时可以执行多次 git addgit commit,形成多个commit 接着最后执行 git rebase --continue 结束这次 commit 拆分

比如说要将 a4c7 的 commit 拆分成 2 个 commit
62
首先执行如下命令,进入编辑页面,将要修改的 commit 的 pick 改为 edit

git rebase -i head~2

63
64
查看状态,发现此时的Main文件已是modified状态
65
加入一行代码,表示拆分功能1
66
此时 2 个文件都是 modified
67
将 Employee 文件放入暂存区,表示拆分的功能 1 已被拆分完毕
68
69
然后再将 Main 文件存入暂存区,表示功能 2 拆分完毕。

完成后执行 git rebase --continue 完成全部操作
70
此时的 log
在这里插入图片描述
可以看到已完成拆分

发布了26 篇原创文章 · 获赞 1 · 访问量 303

猜你喜欢

转载自blog.csdn.net/github_39353936/article/details/104299614