当前位置:   article > 正文

git 良好实践之频繁commit 谨慎push_可以多次commit一次push吗?

可以多次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
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

From:

pick 7384f8b 2-5
pick f67f5c8 6
pick e48e8b5 7
pick 5460111 add s
  • 1
  • 2
  • 3
  • 4

To:

pick 7384f8b 2-5
s f67f5c8 6
squash e48e8b5 7
squash 5460111 add s
  • 1
  • 2
  • 3
  • 4
  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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

To:

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

change trace log level
  • 1
  • 2
  • 3
  • 4

到此已经完成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
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/68112
推荐阅读
相关标签
  

闽ICP备14008679号