赞
踩
所谓频繁,是指对于git commit的频率定义应该是,在保证每次commit有意义的基础上“最大限度”的频繁。
所谓谨慎,是指在push之前压缩那些临时的或者无意义的commit,这要靠git 的rebase实现。
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
我们觉得中间提交没啥意义,而且这几快照不具有“分别的保存价值”,我们希望合成一个,那么我们可以依次如下操作
git rebase -i head~4
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
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。