• git中利用rebase来压缩多次提交 原文:https://blog.csdn.net/itfootball/article/details/44154121


    之前我们用git merge –squash来将分支中多次提交合并到master后,只保留一次提交历史。但是有些提交到github远程仓库中的commit信息如何合并呢?

    使用下面的命令,最后一个数字4代表压缩最后四次提交。

    git rebase -i HEAD~4

    该命令执行后,会弹出vim的编辑窗口,4次提交的信息会倒序排列,最上面的是第四次提交,最下面的是最近一次提交。

    这里写图片描述

    我们需要修改第2-4行的第一个单词pick为squash,这个意义为将最后三次的提交压缩到倒数第四次的提交,效果就是我们在pick所在的提交就已经做了4次动作,但是看起来就是一次而已:

    这里写图片描述

    然后我们保存退出,git会一个一个压缩提交历史,如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了。修改以后要记得敲下面的命令:

    git add .
    git rebase --continue

    如果你想放弃这次压缩的话,执行以下命令:

    git rebase --abort

    如果所有冲突都已经解决了,会出现如下的编辑窗口:

    这里写图片描述

    这个时候我们需要修改一下合并后的commit的描述信息,我们将其描述为helloworld吧:

    这里写图片描述

    保存退出后会看到我们完整的信息:

    $ git rebase -i HEAD~4
    [detached HEAD 9097684] helloworld
     Author: xuxu <xuxu_1988@126.com>
     Committer: unknown <hui.qian@HuiQianPC.spreadtrum.com>
    Your name and email address were configured automatically based
    on your username and hostname. Please check that they are accurate.
    You can suppress this message by setting them explicitly:
    
        git config --global user.name "Your Name"
        git config --global user.email you@example.com
    
    After doing this, you may fix the identity used for this commit with:
    
        git commit --amend --reset-author
    
     9 files changed, 25 insertions(+), 11 deletions(-)
    Successfully rebased and updated refs/heads/master.


    同步到远程仓库

    那么这个时候我们的github上的信息又是如何呢?

    这里写图片描述

    github上的提交历史还是之前的,如何更新我们压缩后的历史记录呢?

    我们采用git push 试试:

    To https://github.com/DoctorQ/AndroidTestScrpits.git
     ! [rejected]        master -> master (non-fast-forward)
    error: failed to push some refs to 'https://github.com/DoctorQ/AndroidTestScrpit
    s.git'
    hint: Updates were rejected because the tip of your current branch is behind
    hint: its remote counterpart. Integrate the remote changes (e.g.
    hint: 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.

    被拒绝了,因为我们合并的历史记录已经在远程仓库之前了,你无法覆盖它。那怎么办?如果你确定你的合并过程都是正确无误的,那么就可以强制push:

    $ git push -f
    warning: push.default is unset; its implicit value is changing in
    Git 2.0 from 'matching' to 'simple'. To squelch this message
    and maintain the current behavior after the default changes, use:
    
      git config --global push.default matching
    
    To squelch this message and adopt the new behavior now, use:
    
      git config --global push.default simple
    
    When push.default is set to 'matching', git will push local branches
    to the remote branches that already exist with the same name.
    
    In Git 2.0, Git will default to the more conservative 'simple'
    behavior, which only pushes the current branch to the corresponding
    remote branch that 'git pull' uses to update the current branch.
    
    See 'git help config' and search for 'push.default' for further information.
    (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
    'current' instead of 'simple' if you sometimes use older versions of Git)
    
    Counting objects: 1, done.
    Writing objects: 100% (1/1), 232 bytes | 0 bytes/s, done.
    Total 1 (delta 0), reused 0 (delta 0)
    To https://github.com/DoctorQ/AndroidTestScrpits.git
     + 415a0be...9097684 master -> master (forced update)
    
     
  • 相关阅读:
    《穿越时空的git》之创建版本库和常用命令操作
    全链路灰度在数据库上我们是怎么做的?
    菜鸟 CPaaS 平台微服务治理实践
    与字节、小米、移动云等企业一起揭秘 RocketMQ 实践之道
    2022 云原生编程挑战赛火热报名中!看导师如何拆解 Serverless 赛题?
    阿里云消息队列 Kafka消息检索实践
    阿里云 MSE 支持 Go 语言流量防护
    不懂就问,快速成为容器服务进阶玩家!
    有奖征文 | 2022 云原生编程挑战赛征稿活动开启!
    发评测赢好礼 | Serverless 函数计算征集令
  • 原文地址:https://www.cnblogs.com/dazhan/p/9289667.html
Copyright © 2020-2023  润新知