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

Nik*_*iou 7 git

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

例如

git remote add foreign-remote https://github.com/some-open-source-project
Run Code Online (Sandbox Code Playgroud)

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

例如

git checkout foreign-remote/master
git checkout -b experiment
git push origin experiment
Run Code Online (Sandbox Code Playgroud)

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

两个子图

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

我们怎样才能完全删除那个正确的部分?它没有造成任何伤害,但它非常烦人,我想摆脱这个子图,最好不留下任何痕迹.

还有,有办法防止这种情况发生吗?

Ren*_*ink 10

从远程控制器中删除指向错误图形的分支.在你的情况下它是experiment.

git push origin :experiment
Run Code Online (Sandbox Code Playgroud)

如果其他开发人员已经获得该分支,他们必须做一个

git fetch --prune
Run Code Online (Sandbox Code Playgroud)

更详细

     A                         F
    /|\                        |
   B C D                       G
    \|/                        |
     E <-- origin/master       H <--- origin/experiment
Run Code Online (Sandbox Code Playgroud)

现在,如果experiment从中删除分支,origin那么H将不再引用提交.因此,提交F-G-H将被删除git gc.

从遥控器中删除后.已经提取它的开发人员必须执行a git fetch --prune删除不再存在的遥控器.

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

还有,有办法防止这种情况发生吗?

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