feedforward 发表于 2022-1-24 23:25:33

git squash和git commit --amend的用法

一 git squash的用法
1 用途
考虑如下场合,我们在本地仓库的新建分支上没修改一次就向线上clone仓库的对应分支上commit一次,经过多次commit后我们准备将线上clone仓库的对应分支合并到远程master分支上,整个merge中包含多个commit,处理起来非常不方便,此时我们就需要用到git squash功能将多个commit合并(git squash)成一个commit再merge.
2 操作过程
a: 执行git rebase --interactive HEAD~5   命令,执行后,会进入以下编辑界面
pick xxx: commit1 add : add xxx
pick xxx: commit2 fix: update xxxx
pick xxx: commit3 fix: delete xxx
pick xxx: commit4 modify : update xxxx b: 移动光标,编辑以上4次commit,例如将除第一行的pick外,其余的pick都改成 squash
pick xxx: commit1 add : add xxx
squash xxx: commit2 fix: update xxxx
squash xxx: commit3 fix: delete xxx
squash xxx: commit4 modify : update xxxxc: 保存编辑,注意:此时提示你命名并选择保存到哪儿,这时千万不能命名保存,否则不起作用,原因未知,怎么解决也未知!正确的操作为:直接回车
d: 将合并后的commit同步到线上clone仓库的对应分支上: git push -f origin fft
e: 再次执行将线上clone仓库的对应分支合并到远程master分支上,此时的merge显示就只有一个commit了其他几个commit以注释的形式存在于合并后的commit标题上.

二 git commit --amend的用法
1 用途
继续前面的git squash过程,由于最后的merge显示只有一个commit,其标题是commit1 add : add xxx 整个标题可能太简单,无法提示该merge的内容,这时你需要通过git commit --amend改变commit的名称或增加commit的注释.

2 操作过程
a: 执行命令 git commit --amend
b: 在命令行编辑模式下修改commit标题和注释
修改前:
commit1 add : add xxx
commit2 fix: update xxxx
commit3 fix: delete xxx
commit4 modify : update xxxx
修改后
xxxxxxxxxxxxx commit
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc: 将合并后的commit同步到线上clone仓库的对应分支上: git push -f origin fftd: 再次执行将线上clone仓库的对应分支合并到远程master分支上,此时的merge显示的一个commit的标题就和说明就复杂多了.





页: [1]
查看完整版本: git squash和git commit --amend的用法