zoukankan      html  css  js  c++  java
  • [转] git merge 将多个commit合并为一条之--squash 选项

    [FROM] https://blog.csdn.net/themagickeyjianan/article/details/80333645

    1.一般的做法(直接git merge)

    Git相对于CVS和SVN的一大好处就是merge非常方便,只要指出branch的名字就好了,如:

    $ git merge another
    $ git checkout another
    # modify, commit, modify, commit ...
    $ git checkout master
    $ git merge another

    2.改进版本:合并多个提交为一条(git merge --squash branchname)

    但是,操作方便并不意味着这样操作就是合理的,在某些情况下,我们应该优先选择使用--squash选项,如下:

    $ git merge --squash another
    $ git commit -m "message here"

    --squash含义和原理如下:

    --squash选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。

    判断是否使用--squash选项最根本的标准是,待合并分支上的历史是否有意义。

    如果在开发分支上提交非常随意,甚至写成微博体,那么一定要使用--squash选项。版本历史记录的应该是代码的发展,而不是开发者在编码时的活动。

    只有在开发分支上每个commit都有其独自存在的意义,并且能够编译通过的情况下(能够通过测试就更完美了),才应该选择缺省的合并方式来保留commit历史。

    3.实验:

    1.master分支上只有一个文件1.txt

    2.切出一个feature-squash分支,并且进行3次提交

    3.将feature-squash分支用 --squash选项merge到master分支,可以看出merge玩,会提示:做一次提交

    新的提交日志是"执行 git merge --squash feature-squash" 

    4.查看master分支,发现将squash上多次提交合并为依次提交了

    4.思路总结:

    1.  dev  "1.txt"   

    2. dev_jn   "1.txt"       此外另做3次相当于开发了新的功能,分别提交记录是:  "2.txt"   "3.txt"   "4.txt"

    3.将dev_jn上的"2.txt"、"3.txt"、"4.txt"  3个提交合并成大的commit提交记录 "squash merge"一次提交;

    4.查看dev提交记录,只有 "1.txt"、"squash merge" 这2个提交记录,从而保证dev上提交记录的干净性.

  • 相关阅读:
    语言及其文法
    编译原理绪论
    数据库系统绪论
    Flask系列-模板
    进程调度
    Flask系列-程序基本结构
    针对博客园上传md文件有点麻烦的解决方案
    博客样式存档二 (目前样式)
    [省选联考 2020 A 卷] 组合数问题
    退役划水(2)
  • 原文地址:https://www.cnblogs.com/pekkle/p/9857775.html
Copyright © 2011-2022 走看看