文章目录
1.对上一次 commit 的备注或者代码进行修改
比如张三刚刚执行了一个不规范的commit备注


修改提交备注:
git commit --amend

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

可以发现之前的 SHA-1 值没了,在 “完成部门管理” 这个 commit 上面重新构建了一个 commit object
2.对上一次 commit 加入几行遗漏的代码
比如张三刚执行了一个 commit,结果扫了一眼代码发现今天忘记修改几行代码了,需要修改之后补充到上一个 commit 中去。也可以通过该命令来实现。
首先修改代码,然后加入暂存区,然后再次执行



会发现之前的 commit object 也被删除了,构建了一个新的 commit object
查看最近2次的代码差异

3.对历史上的多个 commit 进行修改
比如张三可能在本地连续几天都提交了几个 commit,但是一直忘了 push 到远程仓库。突然有一天需要将这个几天的 commit 一次性 push 到远程仓库,但是又发现了 3 天前的某个 commit 备注不规范,需要调整一下。
#该命令只能针对本地最近一次commit去修复
git commit --amend
#调整本地最近3个commit
git rebase -i HEAD~3
张三最近 2 次 commit 都不规范

执行如下命令,进入修改界面
git rebase -i head~2

将需要调整的 commit 之前的 pick 修改为 edit,然后保存退出,此时工作区的代码:

执行 git commit --amend 修改备注。修改完后执行
git rebase --continue
前进到 242f207 的 commit object。可以看到此时的指针是 feature/002 rebase -i 2/2 以及其工作区的状态。

再进行 git commit --amend 修改备注后,继续执行 git rebase --continue,此时的指针指向了 feature/002 分支,说明需要进的修改已经全部完毕。

最后的日志结果:

通过 git rebase --continue 和 git 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 的代码进行修改

git rebase -i head~7
将其从 pick 改为 edit,修改后保存退出

此时的工作区将还原到当时的代码

对代码进行修改:

加入暂存区后修改备注:


查看日志

修改成功!
一般是不予许对前几天的 commit 加入代码的,除非是特例
比如说3天前些好的某个功能,忘了加一些非核心的代码,如日志代码,监控代码等,那么可以加入这些代码
5.删除 commit 以及调整 commit 的顺序
这个场景存在于比如说偶尔不小心加了一个空行,最后提交了,此时是需要将那个不规范的 commit 给删除掉(如果公司有 git提交规范)。
不小心 commit 了一个不规范的备注

之后又在空行的这行写入了其他代码

此时的 git log:

要删除不规范的 commit 备注,先 rebase 到该 commit

需要解决冲突,此时的工作区代码:

解决冲突:

再 git add --all . 和 git commit -m “解决冲突”,查看日志

会发现不规范的 commit 已经被删除了
6.将多个 commit 合并为一个commit
push 到远程仓库之前要将今天的多个 commit 合并在一起的。因为一般一天只能有一个 commit
比如第一个 commit

第二个 commit:


git rebase -i head~2
进入编辑页面,将 pick 改为 squash

保存后退出

根据提示,应该包含前面 3 个而不是 2 个
# 先撤销
git rebase --abort
# 再次进入编辑页面
git rebase -i head~3

保存后将自动进入编辑页面,然后将 commit 备注全部重新写一个 commit
查看今天和 commit 和昨天的 commit 之间的差异
注意:如果要合并多个 commit,那么一定要往前多选择一个 commit
7.将一个commit切分为多个commit
比如说你好几天没有合并代码,然后突然有天不小心将3天修改的代码都合并成了一个 commit 了,此时木已成舟,没法用 git add -i 来多次 commit 了。这时就需要将这个 commit 拆分为多个 commit,还是在上面那个界面,将要拆分开来的 commit 前面的指令,修改为edit然后你就会回到那个 commit 对应的版本,此时执行 git reset HEAD^,此时会直接回退到之前的状态,然后此时可以执行多次 git add 和 git commit,形成多个commit 接着最后执行 git rebase --continue 结束这次 commit 拆分
比如说要将 a4c7 的 commit 拆分成 2 个 commit

首先执行如下命令,进入编辑页面,将要修改的 commit 的 pick 改为 edit
git rebase -i head~2


查看状态,发现此时的Main文件已是modified状态

加入一行代码,表示拆分功能1

此时 2 个文件都是 modified

将 Employee 文件放入暂存区,表示拆分的功能 1 已被拆分完毕


然后再将 Main 文件存入暂存区,表示功能 2 拆分完毕。
完成后执行 git rebase --continue 完成全部操作

此时的 log

可以看到已完成拆分
570



被折叠的 条评论
为什么被折叠?



