如何在不进行拉取的情况下在我的本地存储库之前修复 Git 上的远程分支

How to fix a remote branch on Git ahead of my local repository without doing a pull

我正在与许多使用 git 的人合作进行一个项目。我远离团队,我们的工作方式是这样的:

1) 他们在 'develop' 之外创建分支,然后在测试后将它们合并到 'develop' 并将其推送到原始仓库。这种情况经常发生。

2) 我时不时地从原点创建自己的开发分支:一个名为 'my_develop' 的分支。然后我创建分支,测试它们并将它们合并到 'my_develop'.

3) 当他们更新 'develop' 时,我经常将 'develop' 合并到我的分支(即合并到 my_develop)。这样可以最大限度地减少分歧,而无需每天将我的工作整合到开发中。

4) 大约一个月一次,我将 'my_develop' 推送到 origin,发出拉取请求,然后它被合并到开发中——然后我从一个新的 'my_develop2' 开始,等等

问题来了。简而言之,有一段时间,代码进入开发阶段时存在一些严重问题,但短时间内未被发现。然而,我已经将这个坏的 'develop' 分支合并到 'my_develop' 中,并将它推到原点。它成为一个功能问题,冻结了我的进度,所以我有一次在我的本地存储库上,在原点之前的 'my_develop' 三个提交上完成了 'git reset' 提交。

现在的问题是无法将'my_develop'推送到origin。它反对的理由是 origin 上的 'tip' 比我在本地的提交要早一些,并要求我拉动以整合分支 'my_develop'.[=11= 上来自 origin 的更改]

当然,重点是我从那时起一直在进行增量开发,从原点返回一些提交。此时,origin 上 'my_develop' 的 HEAD 已经过时,拉动会撤消我在本地 'live' 分支上所做的所有更改。

我看到人们提出了 3 个解决此问题的建议:

1) 做一个'git push origin my_develop --force'。从逻辑上讲这是我想做的,但是有很多关于这样做的危险的警告。

2) 一些建议说用 rebase 来处理这个问题,虽然我不太明白该怎么做。

3) 选项 #3 涉及使用 'ours' 作为合并的方式,但给出 git 指导来决定合并冲突中的哪一行代码 'wins'。

关于执行此操作的最佳方法有什么建议吗?

注意:如果有帮助的话,我是唯一在 'my_develop' 上工作的人。

自从我第一次发布后请注意:我想我可以简单地转到我的分支 ('git checkout my_branch'),然后从该分支创建一个新分支 ('git checkout -b my_latest_branch'),然后简单地从该分支开始工作- 然后将其推送到原点并发出拉取请求。这会使 'my_branch' 的提示成为孤儿,但我在乎吗?

因为你只有 my_develop

NOTE: I am the only person who does work on 'my_develop', if that helps.

我推荐 git 使用强制选项推送。

  1. 如果您只是 my_develop 中的一员,您可以使用 git push origin my_develop --force' 等强制选项进行推送。这对你的团队没有影响。

  2. rebase 是将代码从主分支更新到功能分支 (my_develop) 的好习惯。但是你的分支 之前绝不能 合并任何东西。

  3. 如果 develop 上的代码不稳定,请不要合并到您的功能分支中。

ps。您可以在从开发合并之前在最后一次提交时创建一个新分支并进行处理。