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认为本地提交与远程提交不同。