在本地Git中删除提交

时间:2019-05-07 08:16:14

标签: git

我的上一次提交已删除。 我的命令:

 git branch
* (detached from a96f277)
  help
  master
  omid
  reza
  rezalocal

git commit
is commited

git push
cant push

git checkout master
git merge master a96f277
: a96f277 is not found!

git checkout a96f277
git log
: my last commit not found;

这显示了我的上一次提交,所有我所做的编辑和添加的文件都已删除!

3 个答案:

答案 0 :(得分:1)

您不能进行推送,因为当您进行提交时,您不在任何分支上。您所做的提交以a96f277作为其父提交,但在任何地方都没有引用,因此可以进行垃圾回收。

实际上,当您在独立的HEAD状态下执行 提交操作时,git会提示这一点:

  

警告:您将留下1个提交,但未连接到   您的任何分支机构:

     

abcdef123 HEAD测试

     

如果您想通过创建新分支来保留它,这可能是个好时机   可以这样做:

     

git分支abcdef123

您应该已经预先签出要提交的分支,但是现在还不算太晚,因为您现在可以在此提交中创建一个分支并将其合并到master中:

git checkout -b temp <commitHash>
git checkout master
git merge temp

(在<commitHash>之后提交时,在您最近的输出中将找到a96f277)(如果不在输出中,请在您的引用日志中获取它)

然后,您将可以照常按下master

答案 1 :(得分:1)

您在a96f277的顶部提交了[让我们说哈希为xyz123],然后切换为master。如果现在通过git checkout a96f277返回a96f277,则您的最后一次提交xyz123将不存在,因为您指向的是先前的提交。

现在,提交xyz123悬空了,因为没有分支指向它。要获取此提交的ID,您可以执行git reflog。它将为您提供您所做的所有操作的历史记录(只要不运行git的垃圾回收周期)。

然后您可以找到xyz123的实际提交ID,然后从中检出,创建一个新分支并将其推送到远程。

希望这会有所帮助!

答案 2 :(得分:1)

a96f277是分离的HEAD的起点,而您的提交在它之前。

要找出提交的哈希值,可以搜索已运行的git commit的输出,也可以使用git reflog

找到它后,假设它是abc123

git checkout master
git cherry-pick abc123
# or
git merge abc123