文章目录
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
第二个comit:
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
可以看到已完成拆分