ebo*_*osi 2 git branch git-merge
我正在整理我的仓库,并想删除一些不再使用的旧分支。有很多有关如何删除这些信息。但是,我不确定这些解决方案对我来说是否安全,因为我使用合并了分支--no-ff。
想象一下我的日志看起来像这样:
master *--*--*--------*--*--*--*
\ / /
\ / |
feature_a *--*--* |
\ |
\ /
feature_b *--*--*
Run Code Online (Sandbox Code Playgroud)
问题:如何删除feature_a和feature_b分支而不丢失数据和日志结构?
基本上,我想那git branch只是回报*master,并在日志曲线看起来仍然像上面(的即没有改写的提交feature_a和_b到master)。
您需要做的就是删除多余的分支名称(git branch -d feature_a feature_b例如)。提交本身是安全的,受分支名称保护master。链接问题的可接受答案是使它自动化的一种方法。
我认为,以不同的方式绘制分支很有帮助,因为Git的工作方式不同(与大多数其他版本控制系统以及您的想法不同)。代替:
master *--*--*--------*--*--*--*
\ / /
\ / |
feature_a *--*--* |
\ |
\ /
feature_b *--*--*
Run Code Online (Sandbox Code Playgroud)
像这样绘制它们:
*--*--*--------M--*--m--* <-- master
\ / /
*---*---* <- / ------ feature_a
\ /
*--*--* <-- feature_b
Run Code Online (Sandbox Code Playgroud)
这样做的原因是Git的工作方式:名称实际上直接指向特定的提交。Git将这三个指向提交的提交称为三个分支的最尖端提交。提交者自己- 全部;图中的所有*s 都独立存在;但可以通过其中一个名称开头找到它们。该名称找到了尖端提交,然后Git从那里向后(向左)工作,以找到分支上的其余提交。
合并提交-我在图中用字母M和标记了两个m-具有同时向后指向两个提交的功能。当Git遵循向后提交时,它必须“同时”(或尽可能接近)遵循所有路径。这意味着最低行提交不仅在分支上feature_b,而且还在分支上master。中行提交中的两个在所有三个分支上。
删除分支名称时,它指向的提交(即提示)将失去其名称。如果这是唯一可以找到该提交的名称,它也将失去对Git的收割者,Git的垃圾收集器的保护(git gc:GC =垃圾收集器,或者我喜欢称之为Grim Collector :-)) 。但是,如果它具有其他一些分支名称,甚至是标签或其他任何可以让您找到它的名称,它都将受到保护。
提示提交“后面”的所有提交也是如此:如果可以通过某些名称访问它们,则可以保护它们免受Grim Collector的侵害。因此,名称确实具有双重目的,但是一旦合并分支提示,就不再需要“保护提交”目的。(当然,如果添加新的提交,则会移动分支tip,并且恢复其双重用途。)
还要注意,远程跟踪分支名称的origin/master工作方式完全相同,除了在添加新提交时移动而不是git fetch从相应的远程添加新提交时,它们会移动。
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |