将破碎的GIT历史重新组合在一起

时间:2013-12-03 17:19:19

标签: git git-merge

背景

我正在感恩节假期的路上开展一个没有互联网连接的项目。在我离开之前,我使用DropBox同步而不是git将文件移动到我的笔记本电脑。馊主意。 .git目录没有正确完成,没有谷歌我唯一能做的就是吹掉整个东西并启动一个新的git存储库。

我从假期回来,现在可以到达具有原始历史的GitHub。

问题

如何将新存储库中的提交应用于原始存储库?

插图

        d -- e -- f -- *  <= working tree when bad things happened
      /
a -- b -- c   (Original git repository) 
      \
       g -- h


a' -- b' -- c' -- d'  (new repo with a' = *)


        d -- e -- f -- a' -- b' -- c' -- d'
      /                                    \
a -- b -- c -- (desired result) ------------m
      \
       g -- h

1 个答案:

答案 0 :(得分:2)

您基本上希望将每个补丁按顺序应用于原始存储库。如果您必须手动git-am每个人,这将是一个皇家的痛苦!但是Git太棒了。如果你记住git-rebase在补丁级别而不是提交级别工作,那么这是相当简单的,并且基本上可以为你完成所有的工作。

当您决定Dropbox项目时,转到您的工作存储库并查看您所在的分支。我强烈建议您的工作目录清洁;如果不是,你应该在继续之前存储它(并知道如何使用git-reflog)。

准备好重播工作后,将新存储库添加为远程存储库。如果您使用临时远程仓库(例如在GitHub上)或本地计算机上的其他目录,这同样适用。现在,假设您调用了远程turkey,请运行以下命令:

$ git fetch turkey
$ git rebase HEAD turkey/master
$ git checkout -b rebased

现在你有一个新的分支rebased,你的感恩节就在其中。我不完全确定Git为什么不继续移动旧的分支指针,但是无论如何:如果你愿意,你可以将新的rebased合并到你的旧分支中,而旧分支应该快进。

此时,您可以删除遥控器并按下GitHub。