git在硬重置之前返回到上一个提交

git在硬重置之前返回到上一个提交,git,github,git-svn,Git,Github,Git Svn,我更改了一些代码,然后运行 git add . git commit -m "message1" 但在那之后,我做到了 git reset hard git pull git push (当然,这一推实际上什么也没做。) 现在我想在提交“message1”时检索文件的状态。我该怎么做呢?只需使用git reflog。它将显示您在存储库中所做操作的完整历史记录。 跟踪要还原以签出的提交后,打开一个新分支(因为您将处于分离头中),并从该点继续工作 第二件事 一旦将内容添加到存储(索引)中,只要g

我更改了一些代码,然后运行

git add .
git commit -m "message1"
但在那之后,我做到了

git reset hard
git pull
git push
(当然,这一推实际上什么也没做。)


现在我想在提交“message1”时检索文件的状态。我该怎么做呢?

只需使用
git reflog
。它将显示您在存储库中所做操作的完整历史记录。
跟踪要还原以签出的提交后,打开一个新分支(因为您将处于分离头中),并从该点继续工作

第二件事
一旦将内容添加到存储(索引)中,只要gc没有运行,就可以随时恢复它。您可以使用
git fsck
查找这些悬挂文件的SHA-1,并使用'git cat file-p'恢复它们,以查看内容并将其复制到您的需要。

只需使用
git reflog
。它将显示您在存储库中所做操作的完整历史记录。
跟踪要还原以签出的提交后,打开一个新分支(因为您将处于分离头中),并从该点继续工作

第二件事
一旦将内容添加到存储(索引)中,只要gc没有运行,就可以随时恢复它。您可以使用
git fsck
查找这些悬挂文件的SHA-1,并使用'git cat file-p'恢复它们,以查看内容并将其复制到您的需要。

只需使用
git reflog
。它将显示您在存储库中所做操作的完整历史记录。
跟踪要还原以签出的提交后,打开一个新分支(因为您将处于分离头中),并从该点继续工作

第二件事
一旦将内容添加到存储(索引)中,只要gc没有运行,就可以随时恢复它。您可以使用
git fsck
查找这些悬挂文件的SHA-1,并使用'git cat file-p'恢复它们,以查看内容并将其复制到您的需要。

只需使用
git reflog
。它将显示您在存储库中所做操作的完整历史记录。
跟踪要还原以签出的提交后,打开一个新分支(因为您将处于分离头中),并从该点继续工作

第二件事
一旦将内容添加到存储(索引)中,只要gc没有运行,就可以随时恢复它。您可以使用
git fsck
查找这些悬挂文件的SHA-1,并使用'git cat file-p'恢复它们,以查看内容并将其复制到您的需要。

git reset hard
将索引(而非工作目录)重置为名为
hard
的分支的状态。所以实际上什么都没有改变:您可以执行一个简单的
git reset
来重置索引。其他一切都没有改变

如果你做了一个git重置--hard,那就不同了。这将把工作目录中的索引和未提交的更改重置为HEAD状态,即当前分支的最后一次提交。由于您直接在该命令之前进行了一次提交,所以如果您在该提交中包含了工作目录的所有更改,您也不会丢失任何内容。如果您没有,那么您就不走运了,那些从未对索引进行过的未提交的更改将丢失

git pull
将从远程获取并将任何更改合并到您的分支中,因此这就是实际更改的地方。因为您在本地进行了提交,所以有两种情况:您是最新的,没有任何更改;远程服务器上发生了更改,Git创建了合并提交。在后一种情况下,您可以使用
git reset--hard HEAD@{1}
来恢复该状态。您还可以使用
git reflog
检查reflog,查看HEAD之前指向的位置


至于
git推送
,显然它什么都没做。事实上,既然您在本地进行了提交,它应该已经做了一些事情。它应该将您的提交和最终的合并提交(如上所述)推送到远程。在这种情况下,不建议再次返回(使用上述命令)撤消这些更改,因为您不应删除已发布的提交。

git reset hard
将索引(而非工作目录)重置为名为
hard
的分支的状态。所以实际上什么都没有改变:您可以执行一个简单的
git reset
来重置索引。其他一切都没有改变

如果你做了一个git重置--hard,那就不同了。这将把工作目录中的索引和未提交的更改重置为HEAD状态,即当前分支的最后一次提交。由于您直接在该命令之前进行了一次提交,所以如果您在该提交中包含了工作目录的所有更改,您也不会丢失任何内容。如果您没有,那么您就不走运了,那些从未对索引进行过的未提交的更改将丢失

git pull
将从远程获取并将任何更改合并到您的分支中,因此这就是实际更改的地方。因为您在本地进行了提交,所以有两种情况:您是最新的,没有任何更改;远程服务器上发生了更改,Git创建了合并提交。在后一种情况下,您可以使用
git reset--hard HEAD@{1}
来恢复该状态。您还可以使用
git reflog
检查reflog,查看HEAD之前指向的位置


至于
git推送
,显然它什么都没做。事实上,既然您在本地进行了提交,它应该已经做了一些事情。它应该将您的提交和最终的合并提交(如上所述)推送到远程。在这种情况下,不建议再次返回(使用上述命令)撤消这些更改,因为您永远不应该删除已发布的提交。

git reset hard
重置索引(而不是工作状态)