繁体   English   中英

git remove旧分支与--no-ff合并

[英]git remove old branches merge with --no-ff

我正在整理我的仓库,并想删除一些不再使用的旧分支。 很多有关如何删除这些信息。 但是,我不确定这些解决方案对我是否安全,因为我使用--no-ff合并了分支。


想象一下我的日志看起来像这样:

master     *--*--*--------*--*--*--*
               \         /     /
                \       /     |
feature_a        *--*--*      |  
                     \        |
                      \       /
feature_b              *--*--*

问题:如何在不丢失数据和日志结构的情况下删除feature_afeature_b分支?

基本上,我希望git branch只返回*master并且日志图仍然像上面一样(即,没有将feature_a_b提交重写到master )。

您需要做的就是删除多余的分支名称(例如git branch -d feature_a feature_b )。 提交本身是安全的,并受到分支名称master保护。 链接问题的可接受答案是使它自动化的一种方法。


我认为,以不同的方式绘制分支很有帮助,因为Git的工作方式不同(与大多数其他版本控制系统以及您的想法不同)。 代替:

master     *--*--*--------*--*--*--*
               \         /     /
                \       /     |
feature_a        *--*--*      |  
                     \        |
                      \       /
feature_b              *--*--*

像这样绘制它们:

*--*--*--------M--*--m--*    <-- master
    \         /     /
     *---*---*  <- / ------ feature_a
          \       /
           *--*--*   <-- feature_b

这样做的原因是Git的工作方式名称实际上直接指向特定的提交。 Git将这三个指向提交的提交称为三个分支的最尖端提交。 提交者自己- 全部 图中的所有*都独立存在; 但可以通过其中一个名称开头找到它们。 该名称找到了尖端提交,然后Git从那里向后(向左)工作,以找到分支上的其余提交。

合并提交-我在图中用字母Mm标记了两个-具有同时向后指向两个提交的功能。 当Git遵循向后提交时,它必须“同时”(或尽可能接近)遵循所有路径。 这意味着底部行提交不只是分支feature_b而且对分支master 中行提交中的两个在所有三个分支上。

删除分支名称时,它指向的提交(即提示)将失去其名称 如果这是唯一可以找到该提交的名称,它也将失去对Git Reaper of Commits,Git的垃圾收集器git gc :GC =垃圾收集器,或者我喜欢称之为Grim Collector的保护): ))。 但是,如果它具有其他一些分支名称,甚至是标签或其他任何可以让您找到它的名称,它都将受到保护。

提示提交“后面”的所有提交也是如此:如果可以通过某些名称访问它们,则可以保护它们免受Grim Collector的侵害。 因此,名称确实具有双重目的,但是一旦合并分支提示,就不再需要“保护提交”目的。 (当然,如果添加新的提交,则会移动分支tip ,并且恢复其双重用途。)

还要注意, 远程跟踪分支名称(例如origin/master工作方式完全相同,除了在添加新的提交时移动而不是在git fetch从相应的远程git fetch新的提交时移动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM