git - 完全删除意外添加的无关远程提交

时间:2015-05-13 09:29:45

标签: git

我手头有一个有趣的问题。在共享团队仓库中,团队成员将一个遥控器添加到一个完全不相关的存储库(这是一个意外)。

e.g。

git remote add foreign-remote https://github.com/some-open-source-project

他检查了那个仓库的主分支并将其推送到我们的仓库。

e.g。

git checkout foreign-remote/master
git checkout -b experiment
git push origin experiment

这有效地在团队回购中创建了两个不相关的子图:

two sub-graphs

左边部分是我们正确的代码,正确的部分是外部存储库。

我们如何完全删除正确的部分?它不会造成任何伤害,但它非常烦人,我想摆脱这个子图,最好不要留下任何痕迹。

另外,有没有办法防止这种情况发生?

1 个答案:

答案 0 :(得分:10)

从遥控器中删除指向错误图形的分支。在您的情况下,它是<extension module="org.jboss.as.cmp"/>

experiment

如果其他开发者已经获得该分支,则必须执行

git push origin :experiment

更详细

git fetch --prune

现在,如果您从 A F /|\ | B C D G \|/ | E <-- origin/master H <--- origin/experiment 删除experiment分支,则不会再引用提交origin。因此,提交H将在F-G-H上删除。

从遥控器中取出后。已经提取它的开发人员必须执行git gc以删除不再存在的遥控器。

如果您想要感觉更安全,请制作备份克隆

  

另外,有没有办法防止这种情况发生?

使用gerrit代码审查。它允许您定义细粒度的访问权限,并且您可以在审核时拒绝更改集。因此,错误的提交将被丢弃,而不会集成到您的存储库中。