git重新基址后推送拒绝
我正在开发名为git重新基址后推送拒绝,git,Git,我正在开发名为auth的功能分支,它是从master分支中派生出来的: C1 (master) \ C2-C3 (auth) 完成C3commit后,我将auth分支推到远程进行备份。然后,master分支在remote上更新,历史记录如下所示: C1-C4 (master) \ C2-C3 (auth) C1-C4 (master) \ C2-C3 (auth) 我正在将auth分支重新设置为更新的master分支,现在的历史如下所示: C1-C4 (m
auth
的功能分支,它是从master
分支中派生出来的:
C1 (master)
\
C2-C3 (auth)
完成C3
commit后,我将auth
分支推到远程进行备份。然后,master
分支在remote上更新,历史记录如下所示:
C1-C4 (master)
\
C2-C3 (auth)
C1-C4 (master)
\
C2-C3 (auth)
我正在将auth
分支重新设置为更新的master
分支,现在的历史如下所示:
C1-C4 (master)
\
C2-C3 (auth)
C1-C4 (master)
\
C2-C3 (auth)
然后我在auth
分支上做了更多更改,进行C5
提交并将auth
分支推送到远程,推送被拒绝,消息是远程上有我本地没有的更新。但是我知道没有其他人推到remote上的auth
分支。那么为什么会有这种行为呢
这只是对此类行为的一个简单解释:
但要小心:如果重新设置基础的分支已被推送到远程(用于备份)
例如,您需要使用
f选项,因为您刚刚用一个新的
一个`
auth
分支的重基
这就是您需要强制推送的原因,只有在您是唯一在此分支上工作的人时,才可以强制推送。如果没有,最好是:
- 将
合并到其中master
- 添加
C5
- 正常推
C1-----C4 (master)
\ \
C2-C3--M--C5 (auth)
谢谢,沃克!我想,为了更好地理解您的答案,我需要知道git是如何知道remote上有不在这里的更改的,也就是为什么git报告这个错误。什么是要调查的主题或阅读的资源?@Maximus这并不是真正的“不存在的变化”。这仅仅是因为GitHub上的auth SHA1与您试图推送的auth SHA1不同(如中所示)@Maximus
git-rebase
通过更改其父提交来更改提交SHA1;这使得GIT认为本地提交与远程提交不同。