这SVN编辑,刚开始熟悉GIT中。

当一个分支在GIT中被删除时,它被从记录中移除?

在SVN,可以很容易地通过恢复删除操作(反向合并)恢复一个分支。像SVN所有的删除,分支永远不会真正删除,它只是从当前的树中删除。

如果该分支实际上从git的历史中删除,会发生什么情况,从该分支合并的变化?是他们保留?

有帮助吗?

解决方案

分行只是指针在GIT中的提交。在GIT中的每个已提交一个完整的源代码树,它是从SVN一个非常不同的结构,其中所有分支和标签(约定)居住在存储库旁边的特殊的“主干”的单独的“文件夹”。

如果该分支被合并到另一个分支被删除之前,那么所有的提交的仍然是从另一个分支可到达时第一分支被删除。它们完全保持原样。

如果该分支不被合并到另一个分支然后在该分支的提交(直到点,其中来自一个分叉提交即仍可达)删除将不再是可见的。

在提交仍然会在仓库中保留,并且可以删除后立即恢复他们,但他们最终会被垃圾回收。

其他提示

在GIT中,分支是只是指针(参考文献),以在提交的有向非循环图(DAG)的提交。这意味着,在删除一个分支,以去除仅提交引用,这可能使DAG中的一些提交可达,从而无形。但是,这是在一个已删除的分支中的所有的提交将仍然是在存储库中,至少直到不可达提交获得(例如使用git gc)修剪。

请注意git branch -d将拒绝删除一个分支,如果它不能确信删除它不会离开不可达的提交。您需要使用更强的git branch -D给力缺失的一个分支,如果它可能会留下不可达的提交。

还要注意的是不可达的提交,如果它们存在,只是删除的分支的最后尖端之间的那些提交和使用COMMIT该GOT合并到另一个现有分支,任何标记提交,或者分支点;以较迟者为准。例如,在以下情况:

----O----*----*----/M----*    <-- master <-- HEAD
     \            /
      \--.----.--/--x---y     <-- deleted branch

仅提交“x”和“y”的将成为删除分支后可达。

如果您对gc.reflogExpire期间内已删除的分支操作,缺省的90天,你就必须记录在HEAD引用日志删除的分支的最后尖端(参见git reflog show HEAD,或git log --oneline --walk-reflogs HEAD)。你应该能够使用HEAD引用日志恢复被删除的指针。还要注意的是在这种情况下,在刚刚被删除的分支不可达的提交将受到保护从修剪(拆除)gc.reflogExpireUnreachable期间,缺省情况下是30天之内。

如果您无法找到引用日志的头刚刚删除分支的顶端,你可以尝试使用git fsck找到“不可达提交”,并检查那些(通过git show <sha1>git log <sha1>)找到尖端被删除的分支的。

独立你如何找到已删除的分支的末端,您可以撤消删除,或者更确切地说,重新创建使用刚删除分支

git branch <deleted-branch> <found-sha1-id>

请注意然而,对于一个分支引用日志将会丢失。


还有 git-resurrect.sh 脚本中contrib/这有助于找到一个分支末端的具有给定名称和复活(撤消删除)它。

的痕迹

如果你担心不小心删除了分公司和没有你的回购不再的本地副本,还有扩展到企业的Git服务器,比如格里特将检测历史重写和分支删除,将其备份在一个特殊的裁判使他们可以在需要时可以恢复,不会受到垃圾收集被修剪。如果需要,出于法律原因格里特的管理员仍然可以删除选定的提交。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top