【问题标题】:Git commit was stopped before finishingGit 提交在完成之前被停止
【发布时间】:2014-07-05 11:39:22
【问题描述】:

这可能令人难以置信,但当我断电时,我正在执行提交。幸运的是,我从未推送过提交。我刚刚恢复了电源,当我尝试在目录中执行 git log 时出现错误:

fatal: bad default revision 'HEAD'

这是一个私人存储库,我已经工作了一周多一点,并且已经提交了大约 5 到 10 次。

我查看了 SO 并找到了 Git tracking entire home directory. Get error - fatal: bad default revision 'HEAD',这没有任何帮助,因为我已经运行了 git init

我刚刚运行ls -la 来查看我的.gitignore 文件是否还在,但你瞧,它已经不见了。我该怎么办?我不想丢失我以前的提交历史。

我对 Git 的了解有限。任何帮助将不胜感激。

编辑 1:

我只有一个分支(主),当我尝试时:git symbolic-ref HEAD refs/heads/master 它并没有改变任何东西。

我也看了git log and show on a bare repo,试过了:

git log --graph --oneline --date-order --decorate --color --all

这给了我:

095cdaa (origin/master) added profile layout
dd9ddec fixed nav bar
4e99ca7 remove unecessary files, add resources, start navigation drawer
8b09709 fix README
c64c422 initial commit

然后我尝试了git branch master 095cdaa...,它给了我错误:

fatal: Failed to resolve HEAD as a valid ref.

编辑 2:

为了快速解决这个问题,我按照@PaulGriffiths 的建议做了:

  1. 克隆存储库
  2. 复制更改的文件并提交
  3. 运行rm -f ./.git/index.lock

【问题讨论】:

  • 如果您说您“从未推送过提交”,大概这意味着您有某种远程存储库,其中包含您之前的所有提交?
  • git fsck 是你想要的命令,我想。
  • 这个问题可以通过给它一个更具描述性的标题来改进。目前标题很模糊。
  • @lschessinger:因此您有什么理由不能将该存储库再次克隆到新目录中吗?如果您当前拥有的实际文件很好,您应该能够将更改的文件复制并提交,并最终到达您想要的位置。
  • @lschessinger: 好吧,你可以一次性复制所有文件,当你git commit -a 时,它实际上只会提交与远程仓库中当前版本不同的文件.当您的本地存储库发生问题时,让您退出是单人项目推送到远程存储库的主要好处。

标签: git


【解决方案1】:

在官方 git book 中查看:Git internals - Maintenance and Data Recovey

如果您的 reflog 仍然完好无损:

git reflog

将显示HEAD 提交的最后状态列表。尝试在列出的提交之一上运行git checkout <hash>,然后运行git branch <newBranchName>

【讨论】:

【解决方案2】:

根据 @PaulGriffiths 的建议,我通过以下方式解决了这个问题:

  1. 正在克隆存储库。
  2. 复制更改的文件并提交。
  3. 在存储库中运行 rm -f ./.git/index.lock

这个解决方案之所以有效,是因为我有一个远程存储库,我之前已经向该存储库进行了许多提交并推送了它们。如果我从未推送过提交,这是行不通的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多