Git约定表示扔掉分支

时间:2010-03-05 10:23:45

标签: git github

情境:

人A创建一个实验分支来解决问题。 B人有兴趣并希望检查代码,由于懒惰的人A推送到他的github而不是配置他的工作站让B人直接从他那里拉。

A和B正在被黑客攻击,C人看到github和克隆人的活动,急于查看最新情况。同时A和B总结了一个可怕的解决方案,并且删除了分支。但是,C人设法将这个想法变成了一个伟大的想要分享的东西。合并地狱开始于C的分支不再与他的合并目标有共同的祖先。


我很高兴看看应如何处理这种情况。

  • 分支是否有一个可接受的命名约定来指示 - 即使被推 - 这个分支很可能完全被删除。 A人指示“如果你从中拉出来,我不能保证继续幸福”的方式
  • 或者在git中是否有一种方法(命令)可以让我将标记分支扔掉?
  • 如果某人已经从中撤出git历史记录,是否根本不会接受改变git历史记录?
  • A人是否应该花时间正确配置他的工作站让B人直接从他那里拉?因此,在黑暗中,不要让任何人知道他们正在做什么。
  • 也许唯一可行的解​​决方案是良好的老式沟通;和你的同龄人谈谈。

如果所有其他方法都失败了,在这种情况下,C人的正确策略是什么?如何在断开连接的图表中完成工作后如何正确应用更改?

3 个答案:

答案 0 :(得分:4)

目前还没有正式的惯例。

抛弃分支的一个很好的例子(2010年3月在Git rebase上的文章中提到)是 git.git的分支pu

Git FAQ details

  

“pu”分支通常不会快进,因为自上次拉动以来,某些提交已完全删除。

     

如果要跟踪它,请在.git/config文件中的正确行添加加号(+),如下所示:

[remote "origin"]
        fetch = +refs/heads/pu:refs/remotes/origin/pu
  

告诉git只需跳过快进检查(用旧的<覆盖您的旧参考)就可以解决问题。
  或者,如果您根本不想跟踪pu分支,则可以完全删除该行。

     

可以想象,在git的未来版本中,我们可能希望能够标记一些分支“这预计会被重绕”显式并使克隆操作注意到,给你加号自动。

所以一个想法就是主动阻止(通过钩子)对那些扔掉分支的推动:

  • 只读
  • 仅由一名管理员更新。

答案 1 :(得分:2)

  

合并地狱开始,因为C的分支不再与他的合并目标有共同的祖先。

当然,A的主分支在已删除的分支中有一个祖先(在其历史中)。

C可以将分支推送到github,A可以再次将其拉出。这有什么问题?或者,C可以在一个新的分支中(在A的主人之上)进行合并/变基,再次让A从他那里拉出来。

更新(对评论的回应)。

删除分支实际上并不会重写历史记录,至少不会以阻止合并的错误方式重写。

我假设A有这样的历史:

a--b--c--d--e--f--g    master
      |
      x--y--z   experiment

所以删除分支后,他仍然有从a到c的提交,可能看起来更像是:

a--b--c--d--e--f--g--h--i--j--k    master

人C可能有:

a--b--c--d--e--f--g    master
      |
      x--y--z--w--v--q   experiment

这是一个完全合理的情况,合并不应该那么糟糕。

例如,C人可以从A的主人那里取出并将实验合并到其中。

答案 2 :(得分:0)

每个维护者都对自己的分支负责。你不能假设另一个提交者提交或不提供了很好的东西。

如果提交者和作者不是同一个人,您可以查看信息。

如果您不想要某个补丁,可以在自己的分支中恢复它。