Git摸爬滚打——Git push remote rejected {change ### closed}


最近在提交项目的时候,遇到了这样一个问题,就是出现了多个没有保存的本地的commit,在push到远程仓库的时候显示git push remote rejected{change ### closed},仔细看了下问题,主要是因为自己本地的commit中出现了这样的情况:多个commit之间虽然commit-id不同,但是change-id 重复了,而在push的时候会把多个commit都提交上去,导致出错。

在网上查了下这个问题,大多数的解决方案是:
重新执行commit --amend删除掉原来的commit id, 之后查看会自动生成新的commit-id,这样就会解决commit id 重复的问题。
但是实际上我的问题在于change-id 冲突,即便我按照这种方式重置了commit-id,依旧没办法解决问题。

一直在纠结要不要备份之后再reset的时候,师兄给我一个好的建议,就是——把本地的多个commit合并,再重新push

Git合并多个commit 的方式

  1. git log 查看提交日志

    举个例子,查看到的git提交历史(由近及远):

    $ git log
    commit 3bf6es ....
    commit 7h90ed ....
    commit 54g8ji ....
    commit 67udif ....
    
  2. git rebase 合并多个commit

    想要合并1~3条commit有两个办法:

  • 从HEAD版本开始过去的三个版本
    git rebase -i HEAD~3
    
  • 指明要合并的版本之前的版本号
    git rebase -i 67udif
    

两个方法的效果相同,都是将前三条commit合并为一个

  1. pick 选取合并之后的提交

    执行完rebase命令之后,弹出的内容大概如下

    pick 3bf6es 'issueID #145: ****'....
    pick 7h90ed 'fix: *****'....
    pick 54g8ji 'feat: ******'....
    

    这种情况下,只能pick一个,其余修改为squash或者s,修改之后如下:

    pick 3bf6es 'issueID #145: ****'....
    s 7h90ed 'fix: *****'....
    s 54g8ji 'feat: ******'....
    

    :wq 保存并退出,Git会主动压缩我们的提交历史,
    1) 如果有冲突:修改冲突,保留最新的历史,不然修改被discard了。修改之后记得

    git add .
    git rebase 
    

    如果想放弃本次合并,执行git rebase --absort
    2) 如果没有冲突或者解决完冲突,则会进入编辑界面

    # This is a combination of 4 commits
    # The first commit's message is:
    ....
    # The 2nd commit's message is:
    ....
    # The 3rd commit's message is:
    .... 
    # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an ....
    

    :wq 保存并退出,输入git log 检查commit的历史就会发现commit已经合并了✔️

将这个合并之后,我的change-ID冲突也就解决了,确保工作区干净之后,可以push了~😊


Author: Casey Lu
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Casey Lu !
评论
 Previous
React的虚拟DOM和Diff算法 React的虚拟DOM和Diff算法
React系列笔记之二 了解React的核心概念对于React的学习至关重要,这一篇详细介绍虚拟DOM和Diff算法。 虚拟DOM(Virtual Document Object Model) Dom的本质: 浏览器中的概念,用JS对象表示
2020-04-13
Next 
CSS3动画基础 CSS3动画基础
介绍CSS3的动画基础以及transition和animation的写法,时间函数的应用,结合js开发优美的过渡效果,多方面结合。 CSS动画的特点: 开发周期短 增加浏览页面的趣味性 增加用户的视觉冲击力 一、CSS动画介绍 CSS
2020-04-08
  TOC