Git缺失提交记录。

4

我是Git新手,遇到了一个奇怪的问题。

我已经在本地repository中提交了一些commit,并使用git log查看了它们,结果显示正常。过了一段时间,我切换回一个更早的commit并希望跳回到最新的commit以继续我的工作。于是我再次输入git log命令。但是现在最新的三四个commits没有显示出来。

输入“git checkout master”命令可以将我带回第二个log命令所指向的最新commit,但并不是我所描述的第一个commit。这是一个问题吗?还是我需要输入其他命令才能返回到最新的commit?

希望我的问题能够被理解。

我输入的所有命令如下:

Git add public/
Git commit -m “Fo“
(无错误)
Git log --oneline。
输出:8个commits。
Git checkout “较早commit的id“
Git log --oneline。
输出:4个commits


你确定这些更改不是在另一个开发分支上进行的,或者可能被隐藏了吗?据我所知,当你的git状态显示出更改时,你不能简单地切换到另一个状态,而不是将更改存储或将其重置/还原到HEAD。如果你确实隐藏了你的更改,使用“git pop”应该会将你返回到开始隐藏时的状态。 - Annihlator
1
您应该提供您运行的确切命令序列和相关输出,以便准确定义您所做的事情。然后准确描述您想要的内容。 - aluriak
1
听起来像是一个分离的HEAD。在熟悉这些功能之前,尝试使用SourceTree。 - Daniel W.
可能更清晰的方法是传递更多的标志给日志记录; 尝试类似于 git log --oneline --all --graph --decorate 的东西。 另外在一个答案中提到了 git reflog - Steve
2个回答

10
在运行git checkout sha1之后,你处于分离HEAD状态。使用git reflog找到之前的HEAD,然后使用git checkoutgit reset --hard回到之前的HEAD。
如果你在一个命名分支上,只需使用git checkout <branch name>即可返回。如果你处于分离HEAD状态,请使用git reflog

当我处于分离的 HEAD 状态时,我只能看到此时之前的提交记录吗? - GuyWithCookies
这样做将使您的工作副本成为“分离的HEAD”,这意味着您不再位于任何分支上。如果您想在此之后提交,您可能需要再次检出一个分支或创建一个新分支。 - Daniel W.
1
@GuyWithCookkies,你可以将分离的 HEAD 视为一个无名分支。HEAD 总是指向工作树的最后一次提交。在你检出特定的 sha1 后,它之后的提交将被隐藏,因为该 sha1 现在是 HEAD。除非你确切知道自己在做什么,否则请始终避免停留在分离的 HEAD 状态,因为你可能会很容易地迷失方向。 - ElpieKay
此外,经常使用 git status(许多 Git 用户设置他们的 shell,以便命令行提示本身包括 git status 的关键项目)。如果它说 detached at <hash>detached from <hash>,则您处于此“分离 HEAD”模式,即匿名分支。这在 rebase 期间是正常的!在大多数其他情况下,这只意味着您需要 git checkout <branchname> 来返回到分支。 - torek

1
我是一位有帮助的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我不认为任何人都明确知道您在询问什么,但我认为您可能已经隐藏了您所做的更改。

类型:

git stash list

那里显示了什么,有任何信息吗?

如果有类似这样的东西

stash@{0}: WIP on master: 049d078 added the index file

你可以输入:

 git stash apply // for the last stash to be applied
 git stash apply stash@{1} // for the second from last stash 

另外,您可以尝试:

git stash pop // apply the stash and then immediately drop it from your stack

这些操作的区别在于pop会从栈中删除stash,而apply会保留它以备将来可能的重用。
如果您的提交在日志或stash中丢失,则可能已重置HEAD。
从现在开始,请按照下一步骤进行工作,以避免混乱。
  • Checkout your branch from updated master

     git checkout -b your_branch_name 
    
  • After you've done some work

     git add "name of your file" or git add * (to add all files)
    
  • Git add command updates the index using the current content found in the working tree, to prepare the content staged for the next commit

    git commit -m "Your message here" 
    
  • To push it to remote origin

    git push origin your_branch_name 
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接