【问题标题】:In Git, how do you see and manage commits that aren't in a branch?在 Git 中,您如何查看和管理不在分支中的提交?
【发布时间】:2010-11-24 13:42:36
【问题描述】:

提交不一定在分支中,那么您如何查看和管理这些提交?另外,是否可以从 gitk 中查看这些提交?

非常感谢!

PS:只是为了让事情更清楚,这里是一个例子:

git init
git commit
touch toto
git add toto
git commit -a
echo $RANDOM > toto
git commit -a
git checkout f798e54 #checkout initial commit
echo $RANDOM > toto
git commit -a #"untracked commit"
gitk --all
git branch
git log
git checkout master #back on the main branch
gitk --all #untracked commit is lost?
git log
git branch

我怎样才能找回我的“未跟踪提交”?

【问题讨论】:

    标签: git version-control branch


    【解决方案1】:

    这种情况称为detached HEAD。通常工具(例如 gitk)不会向您显示无法通过符号分支名称访问的提交。

    要恢复您的提交,您可以使用git reflog 显示所有最近活动的日志,包括您分离的 HEAD。当你找到它时,你可以使用它的提交 ID 和 git checkout 来返回它。如果您发现它很有价值,您可能希望在此时为分支命名。

    【讨论】:

    • 非常感谢您的详细解答!我发现了一个我不知道的 git 领域:) 还要感谢“hacker”提到 git fsck。
    • 您不需要提交 ID 即可返回分支:git checkout -b newbranch 就足够了。
    • 如果您意识到自己现在在一个未命名的分支上,Jakub 的建议就会奏效。当您在转到指定分支后十分钟后意识到时,reflog 技巧很有用。
    【解决方案2】:

    你说的是git fsck --unreachable吗?

    【讨论】:

      【解决方案3】:

      git reflog 将向您显示一个符号名称,例如 HEAD@{0},您可以使用它来访问否则无法访问的提交。然后,您可以使用 gitk --all HEAD@{0} 查看它在您的存储库中的位置。

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 2023-04-08
        • 2017-11-15
        • 1970-01-01
        • 2016-11-18
        • 2011-11-25
        • 2018-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多