编程

Git Squash 用法

545 2024-06-13 09:03:00

在开发一个功能的时候会反复的提交代码,会造成一个功能有很多次提交,在我们要向 mian 做分支合并的时候,就会出现很多 commits,在合并以后同一个功能的 commits 就会很多,导致我们无法清晰的知道这个功能关联的 commit 有哪些,这个 squash 就是优化我们的 commits 信息,让我们的版本仓库看起来简洁明了,功能点一目了然:

使用比较简单,比如我想将本地开发分支的内容合并到 master 主线分支上,并且期望将一个功能的所有提交压缩成一个 commit;

1. 先 checkout master 分支并做本地分支和远程仓库同步

git checkout master
git pull

(一定要做同步,若本地代码和远端仓库不同步的话,就会出现很多远端的修改进入我们的 squash 时的 commits 当中)

2. 切换到开发分支 dev , 并执行 commits 合并操作

git checkout dev
git rebase -i master
 # 执行上面的语句后,会进入以下编辑界面
 pick xxx: commit1 add : add xxx 
 pick xxx: commit2 fix: update xxxx
 pick xxx: commit3 fix: delete xxx
 pick xxx: commit4 modify : update xxxx 
# 进入编辑模式,将除第一行的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 xxxx 

3. 以上操作顺利的话,我们执行以下操作即可:

git push -f

注意:squash 操作后你的提交信息就变成了一次提交,会记录你之前的提交的描述信息,但是已经看不到相关的提交记录了;

4. 看了资料以后,git 在 merge 的时候提供了这种 squash merge 的操作方式,未有实践,这里也做个记录:

git checkout master
git merge --squash dev

这样可以在 master 节点上只看到一个提交,不管你在 dev 分支上有多少次提交

 

GIT