有没有一种方法可以在git中备份一个分支,并能够“重新导入”它?

4

我有一个分支想要删除,但是可能需要能够完整地恢复它的历史记录 - 有没有一种方法可以做到这一点?所以想要这个:

a - b - c - d - e    master
     \
      f - g    tmp

成为:

a - b - c - d - e

我希望能够以某种方式存储a - b - f - g,以便我可以重新应用它-这是可能的吗?


你已经在某个分支上有了A-B-F-G。如果你需要把它拿回来,你只需要将tmp合并到主分支中。我建议不要删除它,因为你认为在某个时候你会想要拿回来。 - Makoto
@Makoto:这只是出于好奇,而且有删除的原因(二进制文件之类的)。有没有办法实现我所说的? - Mr_and_Mrs_D
真的应该避免在版本控制系统中存储二进制文件。 - Makoto
@Makoto:我知道这不是我的树——这就是为什么我想要备份并能够重新审视它。 - Mr_and_Mrs_D
3个回答

5
也许你可以使用git fast-export将分支保存到文件中。如果以后需要,您可以使用git fast-import来恢复它。
为了保存单个分支tmp(即提交fg),您可以使用三个点的语法,如下所示:
git fast-export master...tmp

啊哈!我该怎样导出一个单独的分支呢? - Mr_and_Mrs_D
请查看我回答中的链接文档,其中有选择要导出的修订版本的示例。 - M.M
我需要指定 f..g 吗?这样足够了吗?并且将其输出到文件中?那么这个文件可以在 fast-import 中使用吗? - Mr_and_Mrs_D
感谢 @thirtythree 提供方便的语法 :) - 想到人们实际上拒绝了你增加价值的编辑... - Mr_and_Mrs_D
当然可以;虽然我没有想到它会被拒绝。也要感谢@Matt。作为长期使用Git的用户,这个命令对我来说是新鲜事物...将分支放入冷冻状态可能有其用途! - George Hilliard
显示剩余2条评论

1

只需将存储库克隆到另一个位置,然后从原始存储库中删除该分支。您将能够在克隆中检查它,并在需要时从那里将其拉回。

克隆中的分支基本上只是与您当前存储库不同的某个位置上存在的分支。您总是可以稍后将该分支移回旧存储库。

甚至更容易地从克隆中将该分支推送回原始存储库。

因此,在您的克隆中只需执行以下操作:

git push origin that_branch 

你是否曾将分支推送到github?没错,那正是同样的事情。


当然可以。这是一个完全的克隆。欢迎来到分布式版本控制 :) - Christoph
我知道git - 我想要的是导出单个分支 - 显然@MattMcNabb的答案更相关。我该如何一次性地将分支从克隆中移回去? - Mr_and_Mrs_D
这个仓库非常大 - 我宁愿避免克隆它,只想导出我感兴趣的 blob。 - Mr_and_Mrs_D

0

看起来你已经得到了保留 tmp 变更所需的一切。你应该保留该分支,直到将 tmp 中的变更应用到 master 不再有意义为止。

这可以通过以下简单的方式完成:

git checkout master
git merge tmp

这将把你在tmp上的更改应用到master上。

如果你要将git历史记录备份到其他服务器或其他地方,你基本上会做同样的事情;历史图表仍然会显示相同,你也会以同样的方式恢复更改。


离题了 - 请参见已接受的答案 - 正是我想要的(显然不仅仅是我) - Mr_and_Mrs_D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接