Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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_Version Control_Commit - Fatal编程技术网

上次Git提交失败

上次Git提交失败,git,version-control,commit,Git,Version Control,Commit,我丢失了上一次提交,因为我不小心运行了“git reset--hard HEAD^”。注意:我不想把“^”放在末尾 有办法把它拿回来吗?这是两天的工作:(如果您知道提交ID(例如,在终端上向后滚动或使用git reflog) 其中61567de5d9是最新(丢失)提交的第一位数字。我认为这就是您要寻找的。根据文章,您的提交已“消失”,但未被垃圾收集—有点像Windows中的回收站 运行git fsck--lost-found查找“悬空提交”,并使用git reflog查看它,然后将悬空提交与当前

我丢失了上一次提交,因为我不小心运行了“git reset--hard HEAD^”。注意:我不想把“^”放在末尾

有办法把它拿回来吗?这是两天的工作:(

如果您知道提交ID(例如,在终端上向后滚动或使用
git reflog

其中61567de5d9是最新(丢失)提交的第一位数字。

我认为这就是您要寻找的。根据文章,您的提交已“消失”,但未被垃圾收集—有点像Windows中的回收站


运行
git fsck--lost-found
查找“悬空提交”,并使用
git reflog
查看它,然后将悬空提交与当前分支合并,
git merge 7c61179
git使您很容易返回到以前的状态,并且非常努力地防止丢失您已提交的任何数据。它是这就是你应该经常提交的原因。我有一个命令
git trash
,它可以执行
git reset--hard
状态,但是在编写提交之后,这样我就可以在需要时撤销硬重置

对于最近的状态(即您的确切情况),只需执行
git reset--hard ORIG_HEAD
即可撤消刚才所做的操作

您可以执行基于时间的重置
git reset--hard'@{5分钟前}
将自己置于基于时间的先前状态(您可以使用很多选项,例如,
git reset--hard'@{dayed}
假装今天从未发生过)


否则,请浏览
git reflog
输出,在您感觉的操作使您处于不好的状态之前查找内容并重置为该状态。

在任何情况下,不要使用git gc。这将永久删除未链接的提交。不,除非您特意让git更容易忘记,否则gc不会丢失该提交您的提交(禁用或积极修剪)。任何花了足够时间学习如何配置git以丢失最近的提交的人都至少知道不要问这个问题。
git gc
默认情况下,如果未引用的提交在reflog中长达30天(默认情况下),则不要删除未链接的提交。谢谢。就是这样。我知道它只是漂浮在某个地方,与分支没有链接。结合difftool,我解决了我的“丢失提交”问题:git fsck--丢失找到(显示悬空提交散列)git difftool SOME_HASH somefolder/(我尝试了所有悬空提交,直到找到所需的一个)更一般地说,您可以使用
@{1}
,或
HEAD@{1}
而不是
ORIG\u HEAD
git reset --hard 61567de5d9