Ken*_*Liu 180 git version-control branch revision-history
来自svn,刚刚开始熟悉git.
当在git中删除分支时,它是否从历史记录中删除了?
在svn中,您可以通过还原删除操作(反向合并)轻松恢复分支.与svn中的所有删除一样,分支永远不会被删除,它只是从当前树中删除.
如果实际上从git中的历史记录中删除了分支,那么从该分支合并的更改会发生什么?他们保留了吗?
CB *_*ley 236
分支只是git中提交的指针.在git中,每个提交都有一个完整的源代码树,它是一个与svn截然不同的结构,其中所有分支和标记(按照惯例)与特殊的"主干"一起位于存储库的单独"文件夹"中.
如果在删除分支之前将分支合并到另一个分支,则在删除第一个分支时,仍可以从另一个分支访问所有提交.他们保持原样.
如果在没有合并到另一个分支的情况下删除分支,那么该分支中的提交(直到从仍然可访问的提交分叉的点)将不再可见.
提交仍将保留在存储库中,并且可以在删除后立即恢复它们,但最终它们将被垃圾收集.
Jak*_*ski 83
在Git中,分支只是提交的有向非循环图(DAG)中提交的指针(引用).这意味着删除分支仅删除对提交的引用,这可能使DAG中的某些提交无法访问,因此不可见.但是,删除分支上的所有提交仍然在存储库中,至少在无法访问的提交被修剪之前(例如使用git gc
).
请注意,git branch -d
如果无法确定删除分支将不会留下无法访问的提交,则会拒绝删除分支.如果git branch -D
分支可能会留下无法访问的提交,则需要使用强制强制删除分支.
另请注意,无法访问的提交(如果存在)只是已删除分支的最后一个提示与已合并到另一个现有分支,任何标记提交或分支点的提交之间的提交; 以较晚者为准.例如,在以下情况中:
----O----*----*----/M----* <-- master <-- HEAD \ / \--.----.--/--x---y <-- deleted branch
只有提交'x'和'y'在删除分支后才会无法访问.
如果您在该gc.reflogExpire
期间内默认操作已删除的分支,默认为90天,您将在HEAD reflog中记录已删除分支的最后一个提示(请参阅git reflog show HEAD
,或git log --oneline --walk-reflogs HEAD
).您应该能够使用HEAD reflog来恢复已删除的指针.另请注意,在这种情况下,仅在已删除的分支中的无法访问提交将受到保护,以免在该gc.reflogExpireUnreachable
时间段内进行修剪(删除),默认情况下为30天.
如果在HEAD的reflog中找不到刚刚删除的分支的提示,您可以尝试使用git fsck
查找"无法访问的提交<sha1>",并检查这些(通过git show <sha1>
或git log <sha1>
)以查找已删除分支的提示.
独立于如何找到已删除分支的提示,您可以撤消删除,或者更确切地说,使用重新创建刚刚删除的分支
git branch <deleted-branch> <found-sha1-id>
Run Code Online (Sandbox Code Playgroud)
但请注意,分支的reflog将丢失.
还有git-resurrect.sh脚本,contrib/
其中有助于找到具有给定名称的分支尖端的痕迹并复活(取消删除)它.
归档时间: |
|
查看次数: |
70569 次 |
最近记录: |