我弄乱了我的项目,花了数小时试图修复它。我放弃了,删除了它,然后不得不下载我在GitHub上工作的那个。我解压缩了文件,使它再次统一运行,做了很多工作。然后我想将其提交到GitHub,并且在尝试推送时遇到Git错误,因此我接受了这些人的建议,告诉我:
.git/
目录。然后执行以下命令:git init
git add .
git commit -m "First Commit"
git remote add origin [url]
git push -u origin master
当我删除.git/
并将文件夹推送到我的仓库时,它摆脱了我的提交历史。我曾尝试寻找git reset --hard b1719639
之类的解决方案,但是由于我在提交后从文件夹中删除了.git/
,因此无法恢复到以前的提交,因为它们已经消失了。我仍然有.git/
文件夹。
我该如何解决?
答案 0 :(得分:0)
您极有可能无法恢复历史记录。但是,当您运行git init
时,本地存储库将重新初始化为github存储库的HEAD。此时,如果您运行git status
,您仍然会看到github HEAD和您当前状态之间的变化。确保提交并推动这些操作。 请勿结帐或重设,否则您可能会永远失去一切。
答案 1 :(得分:0)
通常来说,请勿触摸您的.git/
目录。使用git
命令(最好是高级“瓷”命令,而不是低级“管道”命令),并让 it 修改.git/
中的内容。
更重要的是,不要运行您不理解的命令。盲目复制和粘贴命令是遇到麻烦的好方法。 是,问问题。 是,搜索Internet。但是,在使用发现的内容之前,请 阅读 。在尝试之前,您想知道它应该做什么。这对于涉及sudo
的任何命令特别重要,但是一般来说,这是一个很好的建议。我将尝试清楚地解释我建议在下面运行的每个命令。如果您不理解其中之一,请查看相关文档或进行澄清。
好吧,现在,让我们看看是否可以摆脱困境。您说您有旧.git/
目录的备份副本。这应该包含您所有的历史记录。备份新的.git/
并放回旧的.git/
,然后运行git log
以查看您的本地历史记录。希望您会看到以前的提交。
然后运行git status
。我认为您会发现一堆更改过的文件。运行git diff
,以查看工作副本和上一次提交之间的区别。这应该是自您第一次删除.git/
目录以来所做的所有更改。
如果这些更改构成一个逻辑提交,那就太好了。您可以像往常一样添加它们并提交。如果它们应该是多次提交,则可以进行多次提交。如果您想保留第二个.git/
目录中的多个提交,则可以将其添加为file://
远程对象,获取一个分支,并进行一些合并/重定基/摘樱桃。显然,这部分非常取决于您拥有什么和需要什么。
最后,一旦您在git log
中看到了期望,就必须将其推回GitHub。再一次,您需要进行推力。一般而言,强制推送是一项危险的操作(如您所知),因此使用时要格外小心¹。在这种情况下,这可能是有道理的。
¹在大多数情况下,--force-with-lease
比--force
更可取。在这种情况下,我认为不值得从GitHub上获取旧引用来使--force-with-lease
正常工作。