Git相信前面的分支在后面

Git believes ahead branch is behind

我犯了一个错误,在应该推送到 develop 的时候将更改推送到 master。哎呀!

因此,我将更改推送到 develop 并从 master 中删除了更改。

不幸的是,这导致 GitHub 当 develop 是 master 之前的时候,认为 master 是 develop 之前的提交。

如何让 GitHub 理解 develop 是具有较新内容的分支,以便新的更改不会在未来的拉取请求中被覆盖?

编辑:

我通过拉取删除了 master 中的更改,使用

删除了最后一次提交
git revert -m 1 <SHA of commit>

,并将其推送到 master

编辑 2:

看来我没说清楚。 develop分支有我想实现的变化,以后掌握。

但是,master 分支有我应用到 develop 的提交加上一个额外的提交,这抵消了 develop 的更改。

我希望 develop 中的更改将来应用到 master 中。但是,master 认为它是超前的,因为我取消了 develop 中实现的更改。

因此,develop 分支被认为是落后 1 次提交,0 次提前提交,因为 master 有来自 develop 的更改加上一个反转来自 develop 的更改的提交。

根据我的理解,git rebase 会 'fast-forward' 发展到 master。但是,这将是不需要的,因为这会删除 master 将来由于上述解释而需要进行的更改。

这是 git 的概念,其中一个分支在另一个分支的前面和后面。

由于您从 master 中删除了不需要的提交但又进行了 1 次提交(develop 分支中不存在),这意味着 [=11 中存在 1 次提交=] 并且在 develop 分支中不存在。显然,masterdevelop.

提前 1 次提交

同样,必须有一些提交(比如 n),它们存在于 develop 中但不存在于 master - 这意味着 develop 分支是 nmaster.

之前提交

所以你 master 领先(1 次提交)和落后(n 次提交)develop 分支。

要解决此问题,请将 master 合并到 develop 分支。

编辑后:

要解决此问题,请获取您认为正确属于 master 分支的最新提交 ID(就在 develop 分支提交之前)。说 <c1>。然后执行以下操作:

git reset --hard <c1>

这将同时删除合并和取消合并提交。