如何找回丢失的提交?

时间:2021-05-06 00:28:05

标签: git

我已提交消息“主活动中的回收者视图”。头就在上面。我在没有看到警告的情况下切换到了一个新分支。我现在无法看到我提交的消息“主活动中的回收者视图”。如何检索与任何分支无关的提交? 请帮助我对 GitHub 非常陌生。

我的终端如下:

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git add .

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git commit -m "Recycler View in Main Activity"
[detached HEAD 35b478b] Recycler View in Main Activity
 5 files changed, 96 insertions(+), 51 deletions(-)
 rewrite app/src/main/java/com/example/worldclocktest/CitySelectedListAdapter.java (60%)

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git log
commit 35b478bf8761480eeed417d3fa8ae3bab44cfa36 (HEAD)
Author: Hizafa-Nadeem <hizafa.977@gmail.com>
Date:   Thu May 6 04:44:13 2021 +0500

    Recycler View in Main Activity

commit 6dfc1a1db723e268d967ebcf34a8dac45f41514b (Recycler-View)
Author: Hizafa-Nadeem <hizafa.977@gmail.com>
Date:   Thu May 6 02:40:11 2021 +0500

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git push -u origin Recycler_View
error: src refspec Recycler_View does not match any
error: failed to push some refs to 'https://github.com/Hizafa-Nadeem/WorldClock-App-'

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git push -u origin Recycler-View
Enumerating objects: 115, done.
Counting objects: 100% (115/115), done.
Delta compression using up to 8 threads
Compressing objects: 100% (89/89), done.
Writing objects: 100% (115/115), 139.26 KiB | 1.00 MiB/s, done.
Total 115 (delta 19), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (19/19), done.
remote:
remote: Create a pull request for 'Recycler-View' on GitHub by visiting:
remote:      https://github.com/Hizafa-Nadeem/WorldClock-App-/pull/new/Recycler-View
remote:
To https://github.com/Hizafa-Nadeem/WorldClock-App-
 * [new branch]      Recycler-View -> Recycler-View
Branch 'Recycler-View' set up to track remote branch 'Recycler-View' from 'origin'.

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git checkout cities_declared_in_activity_main
error: pathspec 'cities_declared_in_activity_main' did not match any file(s) known to git

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git checkout cities_declared_in_activitymain
error: pathspec 'cities_declared_in_activitymain' did not match any file(s) known to git

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git log
commit 35b478bf8761480eeed417d3fa8ae3bab44cfa36 (HEAD)
Author: Hizafa-Nadeem <hizafa.977@gmail.com>
Date:   Thu May 6 04:44:13 2021 +0500

    Recycler View in Main Activity

commit 6dfc1a1db723e268d967ebcf34a8dac45f41514b (origin/Recycler-View, Recycler-View)
Author: Hizafa-Nadeem <hizafa.977@gmail.com>
Date:   Thu May 6 02:40:11 2021 +0500

    first commit on Recycler View

commit 269b5fee830e7a26a1fabd008f60ff6b236cb111 (cities_declared_in_main_activty)

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git checkout cities_declared_in_main_activty
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  35b478b Recycler View in Main Activity

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 35b478b

Switched to branch 'cities_declared_in_main_activty'

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git status
On branch cities_declared_in_main_activty
nothing to commit, working tree clean

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git push -u origin cities_declared_in_main_activty

2 个答案:

答案 0 :(得分:3)

要记住的事情:在 Git 中,分支只是一次提交的名称。它对它的行为方式还有其他一些影响,但仅此而已。出于多种原因,分支名称在 Git 中至关重要;一是他们保持提交活着。如果提交具有分支名称,或者是此类提交的父级,或者 那个 提交的父级...,则该提交保持活动状态。如果没有,它可能会死。幸运的是,它不会很快死去。

这里是您所做的事情及其含义的快速回顾!

% git add .
% git commit -m "Recycler View in Main Activity"
[detached HEAD 35b478b]

分离头模式意味着您所在的位置没有分支名称:您不是“在分支上”。在故事开始之前,你以某种方式进入了分离头模式并进行了提交。这并不违法,但非常不明智。我不知道你是如何或为什么对自己这样做的。

% git log
commit 35b478bf8761480eeed417d3fa8ae3bab44cfa36 (HEAD)
commit 6dfc1a1db723e268d967ebcf34a8dac45f41514b (Recycler-View)

所以看起来你在这个父链上至少有两个提交:你刚刚创建的分离的一个,以及它之前的 Recycler-View 分支提交。

% git push -u origin Recycler_View
error:

你弄错了分支名称。就在你面前!下次,尝试复制并粘贴分支名称。更好的是,切换到一个 shell,它可以让你的分支名称自动完成。

% git push -u origin Recycler-View

你的分支名称正确,然后推送。但是你推的是6dfc1a1。你还没有推送新的提交 35b478b,它仍然是分离的。

% git checkout cities_declared_in_activity_main
error:

没有这样的分支。

% git checkout cities_declared_in_activitymain

仍然没有这样的分支。为什么你甚至不询问分支名称是什么?该命令是(等待)git branch

% git log

找出真正的分支名称的一种愚蠢的方法,但它确实有效。

% git checkout cities_declared_in_main_activty
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

Git 尽可能大声地警告您,您将失去对提交 35b478 的所有命名访问权限。它是分离的!

好的,但你已经做到了。这是一个问题吗?不!不是马上。请记住,提交不会很快消失。提交仍然存在。把自己收拾好,然后说

% git checkout 35b478

Presto,你丢失的提交又回来了!这一次,用它做一些合理的事情。一个分离的提交可以最终被删除,所以如果你不希望这种情况发生,拯救这个提交!最简单的第一步是,检查提交后,给它一个分支名称:

% git branch rescue

现在您可以决定如何处理您拯救的提交。我不知道你的意图,所以我不能就此给你建议。

答案 1 :(得分:2)

您的命令行显示您可以使用

为提交创建一个分支
git branch <new-branch-name> 35b478b

这里,35b478b 是提交 ID。这意味着您也可以使用

切换到新分支
git checkout 35b478b -b <new-branch-name>

没有分支的无头结账将是

git checkout 35b478b

你可以看到提交

git reflog

这会列出您访问过的提交,而不仅仅是您最近的历史记录。

你也可以用

git checkout origin/Recycler-View
相关问题