git 良好实践之频繁commit 谨慎push

git 的commit和push是频繁与谨慎的统一

所谓频繁,是指对于git commit的频率定义应该是,在保证每次commit有意义的基础上“最大限度”的频繁。
所谓谨慎,是指在push之前压缩那些临时的或者无意义的commit,这要靠git 的rebase实现。

使用rebase实现commit压缩

rebase(变基)主要用来整合来自不同分支的修改,与merge要达到的目的一样。
它的原理是首先找到两个分支 的最近共同祖先 ,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 , 最后以此将之前另存为临时文件的修改依序应用。
如果我们将rebase应用在同一分支的之前的某次commit,结果会怎么样?
通过以上原理我们可以看出,是的,在一个分支上用没有任何变化,没任何用。。。

也不尽然,我们使用交互模式执行rebase,通过简单修改就可以实现commit的“合并”。

例子

比如,本地修改时做了若干次提交,很乱,如下,总共五次提交

$ git log --pretty=format:"hash: %h commit message: %s"
hash: 5460111 commit message: add s
hash: e48e8b5 commit message: 7
hash: f67f5c8 commit message: 6
hash: 7384f8b commit message: 2-5
hash: 3f13d3f commit message: 1

我们觉得中间提交没啥意义,而且这几快照不具有“分别的保存价值”,我们希望合成一个,那么我们可以依次如下操作

  1. 执行交互的rebase操作
git rebase -i head~4
  1. 上述命令执行完成后,按照以下方法修改文件, squashs都可以

From:

pick 7384f8b 2-5
pick f67f5c8 6
pick e48e8b5 7
pick 5460111 add s

To:

pick 7384f8b 2-5
s f67f5c8 6
squash e48e8b5 7
squash 5460111 add s
  1. 完成修改后保存并提交,这一步是生成压缩后的提交的commit message,可以不修改,这样就是罗列这几次压缩的messge,也可以按照下边的方法修改

From:

\# This is a combination of 4 commits.
\# This is the 1st commit message:

2-5

\# This is the commit message #2:

6

\# This is the commit message #3:

7

\# This is the commit message #4:

add s

To:

\# This is a combination of 4 commits.
\# This is the 1st commit message:

change trace log level

到此已经完成commit压缩的工作,可以push到服务器了,push之前可以log查看一下。

$ git log --pretty=format:"hash: %h commit message: %s"
hash: 4d1f3e2 commit message: change trace log level
hash: 3f13d3f commit message: 1

猜你喜欢

转载自blog.csdn.net/iceboy314159/article/details/105309104