Git无法在cherryPick之后提交修改

Git无法在cherryPick之后提交修改,git,github,intellij-idea,Git,Github,Intellij Idea,场景如下 创建新的更改提交和推送(完成确定)尚未合并让我们称之为A 一段时间后,执行git重置——硬源代码,然后获取并重新基于主代码 3.选择更改A并更新两个文件 git添加 吉特拉力 git提交--修改 git-push-f源主机 现在我得到了以下错误: Total 0 (delta 0), reused 0 (delta 0) remote: Processing changes: done To ! [rejected] master -> master (non-fa

场景如下

  • 创建新的更改提交和推送(完成确定)尚未合并让我们称之为A
  • 一段时间后,执行git重置——硬源代码,然后获取并重新基于主代码 3.选择更改A并更新两个文件
  • git添加
  • 吉特拉力
  • git提交--修改
  • git-push-f源主机
  • 现在我得到了以下错误:

    Total 0 (delta 0), reused 0 (delta 0)
    remote: Processing changes: done
    To ! [rejected]        master -> master (non-fast-forward)
    error: failed to push some refs to 
    hint: Updates were rejected because a pushed branch tip is behind its remote
    hint: counterpart. Check out this branch and integrate the remote changes
    hint: (e.g. 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    
    在提交之前我做了一次git拉取,我得到的信息是最新的,你知道我错过了什么吗?我应该如何让它工作


    我使用intellij

    然后
    提交--amend
    把事情搞砸了。这是你做的,视觉上。拉取后,
    master
    origin/master
    处于同一提交状态

    A - B - C [master] [origin/master]
    
    然后你做了一个
    提交--amend
    。这将接受B和C之间的更改,加上新的编辑,并创建一个新的提交D。D的父级是B,因此您创建了一个分支

    A - B - C [origin/master]
         \
          D [master]
    
    origin/master
    master
    现在已经分开。当您尝试推送时,git拒绝,因为只允许快进

    要修复此问题,
    git reset--soft origin/master
    --soft
    将保留D中的工作,但现在您的父级是C。然后您可以执行正常提交(而不是提交修改)。这是首选选项,因为它允许您正常地
    推送
    ,不会干扰其他人的工作

             [origin/master]
    A - B - C - E [master]
         \
          D
    
    (D)将进行垃圾收集)

    或者,您可以
    git push--force
    。这告诉git,D是现在掌握的
    master
    的新技巧,并抛弃了C。强制推送对于其他基于C的工作现在将无效的开发人员来说是非常不友好的。他们在尝试
    时会出错,并且必须进行修复,这是一个大混乱


    经验法则是,一旦你推动了一个变化,就不要重新设定它的基准<代码>git提交--amend
    计为重定基址


    不要习惯性地强迫推。

    然后
    提交--修改
    把事情搞砸了。这是你做的,视觉上。拉取后,
    master
    origin/master
    处于同一提交状态

    A - B - C [master] [origin/master]
    
    然后你做了一个
    提交--amend
    。这将接受B和C之间的更改,加上新的编辑,并创建一个新的提交D。D的父级是B,因此您创建了一个分支

    A - B - C [origin/master]
         \
          D [master]
    
    origin/master
    master
    现在已经分开。当您尝试推送时,git拒绝,因为只允许快进

    要修复此问题,
    git reset--soft origin/master
    --soft
    将保留D中的工作,但现在您的父级是C。然后您可以执行正常提交(而不是提交修改)。这是首选选项,因为它允许您正常地
    推送
    ,不会干扰其他人的工作

             [origin/master]
    A - B - C - E [master]
         \
          D
    
    (D)将进行垃圾收集)

    或者,您可以
    git push--force
    。这告诉git,D是现在掌握的
    master
    的新技巧,并抛弃了C。强制推送对于其他基于C的工作现在将无效的开发人员来说是非常不友好的。他们在尝试
    时会出错,并且必须进行修复,这是一个大混乱


    经验法则是,一旦你推动了一个变化,就不要重新设定它的基准<代码>git提交--amend
    计为重定基址


    而且不要习惯性地用力推。

    你确定你使用的是用力推吗?GitHub上的主分支是否受到保护,因此您无法强制推送它?你为什么要强行推?您已经发布了提交,因此以后不应该修改它!你确定你用的是用力推吗?GitHub上的主分支是否受到保护,因此您无法强制推送它?你为什么要强行推?您已经发布了提交,因此以后不应该修改它!在最后一个注释中,你是说力推是一种可行的替代方法。但是,Mark在步骤6中使用了git push-f
    ,但仍然失败。我怀疑他实际上不被允许强制推到
    原点/主控点
    。这可能也有一个很好的理由。谢谢,但你能告诉我什么时候我应该做软假设我再做一次所有的步骤吗?@Mark我很难知道到底出了什么问题,但是你的
    master
    已经偏离了
    origin/master
    。在这一点上,您最好的选择是使用类似于或的可视化工具查看存储库,并找到它的分歧点。
    merge
    您的母版与
    origin/master
    rebase
    您的
    master
    origin/master
    或任何其他方式。如果你发布了回购可视化的屏幕截图,这可能会有所帮助。在最后一个注释中,你是说强制推进是一种可行的替代方法。但是,Mark在步骤6中使用了git push-f
    ,但仍然失败。我怀疑他实际上不被允许强制推到
    原点/主控点
    。这可能也有一个很好的理由。谢谢,但你能告诉我什么时候我应该做软假设我再做一次所有的步骤吗?@Mark我很难知道到底出了什么问题,但是你的
    master
    已经偏离了
    origin/master
    。在这一点上,您最好的选择是使用类似于或的可视化工具查看存储库,并找到它的分歧点。
    merge
    您的母版与
    origin/master
    rebase
    您的
    master
    origin/master
    或任何其他方式。如果你发布了回购可视化的屏幕截图,可能会有所帮助。