背景
我正在感恩节假期的路上开展一个没有互联网连接的项目。在我离开之前,我使用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
答案 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。