seh*_*ehe 421
一般情况下,您无法取回未提交的更改.
以前分阶段的更改(git add)应该可以从索引对象中恢复,因此如果您这样做,则用于git fsck --lost-found查找与其相关的对象.
如果没有,这里的答案是:看看你的备份.也许您的编辑器/ IDE将临时副本存储在/ tmp或C:\ TEMP之类的东西中.[1]
git reset HEAD@{1}
Run Code Online (Sandbox Code Playgroud)
这将恢复到之前的HEAD
[1] vim例如可选地存储持久性撤销,eclipse IDE存储本地历史 ; 这样的功能可能会节省你的**
ken*_*ken 413
从这个回答SO
$ git reflog show
93567ad HEAD@{0}: reset: moving to HEAD@{6}
203e84e HEAD@{1}: reset: moving to HEAD@{1}
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug
# said the commit to be recovered back is on 9300f9d (with commit message fix-bug)
$ git reset HEAD@{7}
Run Code Online (Sandbox Code Playgroud)
你有一天回来了!:)
Jus*_*tin 297
git reset --hard今天我也不小心跑了我的回购,而今天也有未提交的更改.为了得到它,我跑了git fsck --lost-found,写了所有未引用的blob <path to repo>/.git/lost-found/.由于文件是未提交的,我在其中的other目录中找到了它们<path to repo>/.git/lost-found/.从那里,我可以看到未提交的文件,复制blob,并重命名它们.
注意:仅当您将要保存的文件添加到索引(使用git show <filename>)时,此选项才有效.如果文件不在索引中,则会丢失.
Ga *_*chi 160
是的,您可以通过 git中的硬重置来恢复.
使用:
git reflog
Run Code Online (Sandbox Code Playgroud)
获取提交的标识符.然后使用:
git reset --hard <commit-retrieved-using-reflog>
Run Code Online (Sandbox Code Playgroud)
这招几次挽救了我的生命.
你可以在这里找到reflog的文档.
Orc*_*cun 58
当我在开发本地项目时,我想将它移动到GitHub,然后创建一个新的存储库.当我尝试使用.gitignore将所有这些文件添加到新存储库时,我意外添加了错误的文件然后尝试清除它.
我跑了git reset --hard origin/master:P
然后删除了所有本地文件,因为repo为空.我以为一切都没了.
这救了我的命
git reflog show
git reset HEAD@{1}
git push
Run Code Online (Sandbox Code Playgroud)
希望它拯救另一种生命.
Jon*_*ien 34
如果你使用像IntelliJ这样的东西:
在上下文菜单中,选择"本地历史记录",然后单击子菜单上的"显示历史记录":
项目或文件夹的本地历史记录视图显示您在过去几天中所做的所有事情.在对话框下半部分的"操作"列中,选择要回滚的操作.[...]这样做,对话框的上半部分显示已更改文件的树视图.如果只想恢复已删除的文件,则无论此后所做的其他更改如何,都可以在树视图中选择文件Lost.txt,然后单击"还原"按钮.
http://blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-files/
这让我的屁股出了火!
小智 29
我刚刚做了git reset --hard,失去了所有未提交的更改.幸运的是,我使用编辑器(IntelliJ),我能够从本地历史中恢复更改.Eclipse应该允许你这样做.
Mat*_*Moy 16
根据定义,git reset --hard将丢弃未提交的更改,而Git无法恢复它们(您的备份系统可能有所帮助,但不是Git).
实际上,很少有案例git reset --hard是个好主意.在大多数情况下,有一个更安全的命令来做同样的事情:
如果您想丢弃未提交的更改,请使用git stash.它将保留这些更改的备份,如果您运行,它将在一段时间后过期git gc.如果你99.9%肯定你永远不会需要这些改变,那么git stash仍然是0.1%案例的朋友.如果你100%肯定,那么git stash仍然是你的朋友,因为这些100%有测量误差;-).
如果你想HEAD在历史中移动你当前分支的尖端,那么git reset --keep就是你的朋友.它会做同样的事情git reset --hard,但不会丢弃您的本地更改.
如果你想两者都做,那么git stash && git reset --keep就是你的朋友.
教你的手指不要使用git reset --hard,它会回报一天.
Luc*_*che 14
IntelliJ 有一个可通过history 命令访问的临时文件夹:
Edw*_*kwu 11
如果您不小心硬重置了提交,请执行此操作,
git reflog show
git reset HEAD@{2} // i.e where HEAD used to be two moves ago - may be different for your case
Run Code Online (Sandbox Code Playgroud)
假设HEAD@{2}是您想要回到的状态
Dra*_*ght 10
如果我失去一些变化,这就是我通常会做的事情.
git reflog
git checkout <commit id> // now you are in where you want but you cannot push from detached branch to master
manually copy and paste changes from detached branch to master or working branch
git reset --hard HEAD // if needed
git add ... > git commit ... > git push ...
Run Code Online (Sandbox Code Playgroud)
将指针移回到先前的提交,但保留您在最近的提交结帐中所做的更改 git reset --soft dadada
信息丢失了.
由于您没有提交,您的.git从未存储过此信息.所以,基本上git无法为你恢复.
但是,如果你刚刚做了git diff,有一种方法可以使用终端输出恢复,具有以下3个简单步骤.
git diff.将o/p保存在名为diff.patch的文件中patch -p1 < diff.patch)你得救了!:)
注意:在将数据从终端复制到文件时,请注意并清楚地看到数据是连续输出且不包含任何冗余数据(由于按下向上和向下箭头).否则你可能搞砸了.
小智 6
你可以在做完之后回来提交reset --hard HEAD.
利用" git reflog"来检查HEAD分支的历史.
您将在此处看到您的提交及其ID.
做一个
git reset {commit Id of the commit you want to bring back}
Run Code Online (Sandbox Code Playgroud)
如果您尝试使用以下代码:
git reflog show
# head to recover to
git reset HEAD@{1}
Run Code Online (Sandbox Code Playgroud)
并且由于某种原因正在得到:
错误:未知开关“e”
然后尝试HEAD@{1}用引号括起来
git reset 'HEAD@{1}'
Run Code Online (Sandbox Code Playgroud)
git reset HEAD@{4}
Run Code Online (Sandbox Code Playgroud)
4 是 4 步之前的变化。如果您选择了正确的步骤,它应该显示您从硬盘中删除的文件列表。然后做:
$ git reflog show
Run Code Online (Sandbox Code Playgroud)
它会向你展示我们已经创建的本地提交历史。现在做:
$ git reset --hard 8c4d112
Run Code Online (Sandbox Code Playgroud)
8c4d112 是一个代码,你想在那里重置你的硬盘。让我们看看 https://www.theserverside.com/video/How-to-use-the-git-reset-hard-command-to-change-a-commit-history以获取更多信息。
我遇到了同样的问题,我快要疯了....最初我提交了项目并合并了..后来当我尝试运行时,git push --set-upstream origin master 我遇到了这个错误
Run Code Online (Sandbox Code Playgroud)fatal: refusing to merge unrelated histories
所以我跑了git reset --hard HEAD,它删除了一个3周的项目,但是下面的这几个命令节省了一天:
git reset HEAD@{1} //this command unstage changes after reset
git fsck --lost-found //I got the dangling commit fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
git show <dangling commit something like-> fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b>
git rebase fc3b6bee2bca5d8a7e16b6adaca6a76e620eca4b
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助