在cherryPick之后,Git无法提交修改

时间:2016-02-02 07:37:41

标签: git github intellij-idea

方案如下

  
      
  1. 创建新的更改提交并推送(完成确定)未合并但我们称之为 A
  2.   
  3. 过了一会儿做git reset - hard origin然后获取并重新对抗master   3.cherry选择更改 A 并更新两个文件
  4.   
  5. git add。
  6.   
  7. git Pull
  8.   
  9. git commit --amend
  10.   
  11. git push -f origin master
  12.   

现在我收到以下错误:

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 pull,我收到消息说它是最新的,知道我想念的是什么吗?我该怎么做呢?

我使用intellij

1 个答案:

答案 0 :(得分:3)

pull然后commit --amend搞砸了。这是你在视觉上所做的。在您撤回后,masterorigin/master处于同一提交状态。

A - B - C [master] [origin/master]

然后你做了commit --amend。这将获取B和C之间的更改以及新的编辑,并创建新的提交D. D的父级是B,因此您已经创建了一个分支。

A - B - C [origin/master]
     \
      D [master]

origin/mastermaster现已分道扬..当你尝试push git拒绝时,因为只允许快进。

修复此git reset --soft origin/master--soft将保留D中的工作,但现在您的父级是C.然后您可以执行正常提交(而不是提交修改)。这是首选方案,因为它可以让您push正常,并且不会让其他人的工作陷入困境。

         [origin/master]
A - B - C - E [master]
     \
      D

(D将被垃圾收集)。

您也可以git push --force。这告诉git D现在是master的新提示并抛出C.强制推送对其他基于C的工作现在无效的开发人员非常不友好。他们在尝试pull时会遇到错误,并且必须做好修复工作,这是一个很大的混乱。

经验法则是你推动改变,不要改变它git commit --amend算作变基。

并且不要习惯性地强迫推。