Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将断开的GIT历史恢复到一起_Git_Git Merge - Fatal编程技术网

将断开的GIT历史恢复到一起

将断开的GIT历史恢复到一起,git,git-merge,Git,Git Merge,背景 感恩节假期期间,我在路上做一个没有互联网连接的项目。在我离开之前,我使用DropBox sync而不是git将文件移动到我的笔记本电脑上。坏主意。git目录没有正确地显示出来,如果没有Google,我唯一能做的事情就是把整个事情都处理掉,并创建一个新的git存储库 我度假回来,现在可以去GitHub了,那里有着原始的历史 问题 d -- e -- f -- * <= working tree when bad things happened / a --

背景

感恩节假期期间,我在路上做一个没有互联网连接的项目。在我离开之前,我使用DropBox sync而不是git将文件移动到我的笔记本电脑上。坏主意。git目录没有正确地显示出来,如果没有Google,我唯一能做的事情就是把整个事情都处理掉,并创建一个新的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
如何将新存储库中的提交应用于原始存储库

插图

        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

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

转到您的工作存储库,查看您决定删除项目时所在的分支。我强烈建议你的工作目录要干净;如果不是,那么在继续之前,您应该将其隐藏起来(并知道如何使用
git reflog

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

$ git fetch turkey
$ git rebase HEAD turkey/master
$ git checkout -b rebased
现在,您有了一个新的分支,
重新基调
,其中包含您的感恩节工作。我不完全确定Git为什么不继续移动旧的分支指针,但不管怎样:如果您愿意,可以将新的
重定基址的
合并到您的旧分支中,而旧分支应该快速前进


此时,您可以删除遥控器并推送到GitHub。

将最新的工作副本签出到新目录。然后把整个项目放在最上面。那就承诺吧。它应该只提交更改。不过,您可能无法让每个提交都这样做。我认为解决方案是将Github repo添加为远程,然后在其上重新设置新提交的基础。不过,我没有足够的信心将其作为一个答案发布。这失败了:首先,倒带头部以在其上重播您的工作。。。致命错误:无法从以下命令解析对象“200dddf914aa8e6787e9d778902e72adc45b0589^”未知退出代码(128):git merge recursive 200dddf914aa8e6787e9d778902e72adc45b0589^--HEAD 200dddf914aa 8e6787e9d778902e72adc45b0589Uh。我不知道;听起来您的存储库已损坏。如果运行git fsck(在两个回购协议上),会发生什么情况?