如何从git中已推送的分支中删除所有提交?

如何从git中已推送的分支中删除所有提交?,git,git-branch,Git,Git Branch,在一个有很多团队成员的项目中工作,我们现在正在努力完善我们的工作方式。目前,所有工作都在几年前从master分支的integration分支中完成。出于这样或那样的原因,在主分支中完成了大约600次提交,但没有合并到集成中,在集成中完成了大约1200次提交,但没有合并到主分支中。所有发布都完全脱离集成分支,主分支一年中没有接触过一次。我们希望使用master分支作为我们的稳定分支,但为了做到这一点,我们需要合并integration中的所有更改,并且不保留在master中完成的任何分歧更改 是否

在一个有很多团队成员的项目中工作,我们现在正在努力完善我们的工作方式。目前,所有工作都在几年前从
master
分支的
integration
分支中完成。出于这样或那样的原因,在主分支中完成了大约600次提交,但没有合并到集成中,在集成中完成了大约1200次提交,但没有合并到主分支中。所有发布都完全脱离集成分支,主分支一年中没有接触过一次。我们希望使用
master
分支作为我们的稳定分支,但为了做到这一点,我们需要合并
integration
中的所有更改,并且不保留在master中完成的任何分歧更改

是否有一种简单的方法可以从主分支中删除“无效”提交?或者我们应该简单地创建一个新的存储库,或者在当前集成位置之外创建另一个稳定的分支


更新不幸的是,非快进和远程分支删除被拒绝,我仍在等待存储库托管负责人的响应。我假设它不会那么容易改变,不幸的是,它是一家大公司。

您应该能够
git重置--hard
您的主分支回到您最初创建集成分支的位置。这将使您处于第一次分支时的状态,本质上是“删除”将来提交给master的内容

在这一点上,您可以将您的集成分支合并到master,它们将是相同的。事实上,我认为这只是一个没有冲突的快速合并


要查找原始分支点,可以使用
git merge base master integration
。查看更多想法。

您应该能够
git reset--hard
将主分支恢复到最初创建集成分支的位置。这将使您处于第一次分支时的状态,本质上是“删除”将来提交给master的内容

在这一点上,您可以将您的集成分支合并到master,它们将是相同的。事实上,我认为这只是一个没有冲突的快速合并


要查找原始分支点,可以使用
git merge base master integration
。查看更多想法。

如果无法进行远程删除,那么最简单的方法是:

git checkout integration
cp -a . ../integration-source
rm -rf ../integration-source/.git
git checkout master
mv .git ../integration-source
cd ../integration-source
git add --all
git commit -m"massive commit to make master identical with integration"
git push
cd ..
rmdir projectdirname
mv integration-source projectdirname
塔达

如果可以进行远程删除:

git push --force origin integration:master

如果无法进行远程删除,则最简单的方法是:

git checkout integration
cp -a . ../integration-source
rm -rf ../integration-source/.git
git checkout master
mv .git ../integration-source
cd ../integration-source
git add --all
git commit -m"massive commit to make master identical with integration"
git push
cd ..
rmdir projectdirname
mv integration-source projectdirname
塔达

如果可以进行远程删除:

git push --force origin integration:master

不幸的是,非快进被拒绝,我仍在等待一个答复,他们是否可以启用一段时间。这样做,当其他人拉/取时会有任何问题吗?我会犹豫是否强制非快进。当其他人试图退出时,这很可能会破坏他们的本地回购协议。但这就是我的观点:如果你重置到分支点,然后从你的集成分支向下合并到主分支,这应该是一个快速的合并。您是否尝试了此操作,但失败了?它作为快进报告,但所有其他600次提交都丢失,因此也是非快进。至少这是我的假设:)不幸的是,非快进被拒绝了,我仍在等待是否可以启用一段时间的答复。这样做,当其他人拉/取时会有任何问题吗?我会犹豫是否强制非快进。当其他人试图退出时,这很可能会破坏他们的本地回购协议。但这就是我的观点:如果你重置到分支点,然后从你的集成分支向下合并到主分支,这应该是一个快速的合并。您是否尝试了此操作,但失败了?它作为快进报告,但所有其他600次提交都丢失,因此也是非快进。至少这是我的假设:)啊,该死。现在我提供了另一种稍微复杂一点的解决方案:)不错,但将master合并到integration将带来我们不想要的所有提交。但仍然是一个非常好的解决方案,+1:)如果没有非快进和远程分支删除,这是唯一的解决方案。您将有一些无用/混乱的历史记录,但代码是相同的。再想想,这是基于给定限制的唯一解决方案。历史已经或多或少令人困惑,因此这样做没有什么害处:)如果SCM明天返回报告,将等待,否则将按照您的建议执行。谢谢你这么巧妙的解决方法。啊,该死的。现在我提供了另一种稍微复杂一点的解决方案:)不错,但将master合并到integration将带来我们不想要的所有提交。但仍然是一个非常好的解决方案,+1:)如果没有非快进和远程分支删除,这是唯一的解决方案。您将有一些无用/混乱的历史记录,但代码是相同的。再想想,这是基于给定限制的唯一解决方案。历史已经或多或少令人困惑,因此这样做没有什么害处:)如果SCM明天返回报告,将等待,否则将按照您的建议执行。感谢您提供了这一巧妙的解决方法。