方案如下
- 创建新的更改提交并推送(完成确定)未合并但我们称之为 A
- 过了一会儿做git reset - hard origin然后获取并重新对抗master 3.cherry选择更改 A 并更新两个文件
- git add。
- git Pull
- git commit --amend
- git push -f origin master
醇>
现在我收到以下错误:
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
答案 0 :(得分:3)
pull
然后commit --amend
搞砸了。这是你在视觉上所做的。在您撤回后,master
和origin/master
处于同一提交状态。
A - B - C [master] [origin/master]
然后你做了commit --amend
。这将获取B和C之间的更改以及新的编辑,并创建新的提交D. D的父级是B,因此您已经创建了一个分支。
A - B - C [origin/master]
\
D [master]
origin/master
和master
现已分道扬..当你尝试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
算作变基。
并且不要习惯性地强迫推。