如何将分歧的分支重置为 master

How can I reset a diverged branch back to master

是否可以将远程分支重置为另一个远程分支?

假设我有两个分支:masterdevelopdevelop 分支由 master 组成,用作 integration/build 分支。它没有其他目的。

在冲刺结束时,所有获得批准的功能分支都将合并到主分支中。

在sprint结束的时候,要求大家删除自己本地的develop分支,我们删除远程的,master新建一个。这并不理想,但我们使用的策略本身就是我们商定的最适合或需要的策略。它大致基于每个功能分支的策略。

问题是,如果有人不删除他的本地副本,而是执行更新,他会收到消息说他的本地开发分支领先于远程分支。这是因为从上一个 sprint 中合并但没有进入 master 的功能分支仍在他的本地副本上。构建基础设施本身也有风险,因为如果我们不执行完全干净的检查,我们就有可能旧东西仍然存在。

reset --hard 之类的操作不起作用,它们可能会重置我的本地副本,但我无法将它们推送到远程分支。

有没有办法使用提交使开发分支与主分支完全相同,而不是重新创建它?

因此,您的分支是 masterdevelop。您想要将 develop 重置为 master:

git checkout develop
git reset --hard master
git push -f <remote> develop

或者,如果您已经删除了本地分支 develop,您可以一步完成:

git push -f <remote> master:develop

这会推送本地分支 master,但在远程将其命名为 develop

-f--force 标志表示 "Yes, Git, I'm trying to delete data. I know what I'm doing." 在这种情况下,推送 develop 会丢失远程提交,但您使用 -f 来告诉Git 你想失去那些提交。永远不要使用 -f 除非你知道为什么。

将您的本地版本更新为您想要的提交,然后强制将其推送到您的远程存储库:

git fetch origin
git branch -f develop origin/master
git push origin develop --force