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

时间:2012-03-15 17:42:16

标签: git git-branch

与很多团队成员合作开展项目,我们正在努力改善我们的工作方式。目前,所有工作都在integration分支机构完成,该分支机构几年前已经分支master。出于这样或那样的原因,在master分支中完成了大约600次提交而没有合并到集成中,以及在集成中完成的大约1200次提交未合并到master分支中。所有版本都完全取决于集成分支,主分支在一年内没有触及过一次。我们希望使用master分支作为我们的稳定分支,但为了做到这一点,我们需要合并integration中的所有更改,而不是在master中完成任何不同的更改。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

TA-哒!

如果您可以进行远程删除:

git push --force origin integration:master

答案 1 :(得分:1)

您应该能够git reset --hard您的主分支回到最初创建集成分支的位置。这将使你处于你第一次分支时的状态,基本上“删除”未来的提交要掌握。

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

要查找原始分支点,您可以使用git merge-base master integration。查看this Stack Overflow question以获取更多想法。