Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在我的回购协议中披露一些缺失的git提交_Git_Github - Fatal编程技术网

在我的回购协议中披露一些缺失的git提交

在我的回购协议中披露一些缺失的git提交,git,github,Git,Github,我的项目文件夹当前最新版本(r41) 我记得我曾试图提交一些38版的文件来进行重构,但在我对代码做了一些其他更改并最终提交到r38(我使用git-reset soft HEAD~1)之后,我不得不取消未发布(尚未推送)的提交 我在r41继续工作直到项目完成。现在,我想查看一些代码,发现中缺少旧的提交(r36、r37) 我在过去学习了一些关于Git的知识,但在几个月专注于开发之后,我似乎忘记了一些Github知识,显然想用Github戏剧来缩短它(太多的命令和解释,也不会造成混乱,它们确实需要时

我的项目文件夹当前最新版本(r41)

我记得我曾试图提交一些38版的文件来进行重构,但在我对代码做了一些其他更改并最终提交到r38(我使用git-reset soft HEAD~1)之后,我不得不取消未发布(尚未推送)的提交

我在r41继续工作直到项目完成。现在,我想查看一些代码,发现中缺少旧的提交(r36、r37)

我在过去学习了一些关于Git的知识,但在几个月专注于开发之后,我似乎忘记了一些Github知识,显然想用Github戏剧来缩短它(太多的命令和解释,也不会造成混乱,它们确实需要时间来获得充分的理解和清晰,以避免输入错误的命令)

直截了当地说,根据我目前的情况,我不想创建任何分支。我想保留相同的主控,并在我的回购协议上显示r36、r37。
我应该输入什么git命令?请简单解释。非常感谢。

查看reflog,我认为在r37(两次)之后和r39之后执行了类似于
git reset HEAD~1
的命令。这就解释了为什么
master
分支中缺少提交(
git reset--hard HEAD~1
将具有将HEAD指针移动到上一个提交的效果,有效地从当前分支中删除最后一个提交)(显然,该命令以前用于修改r34)。某些源代码可能会丢失,也可能不会丢失(取决于是否在git reset中指定了
--hard

对未来的建议:

  • 当你想清理你的工作空间时,使用git reset--hard,或者更好,不需要指定修订
  • 使用
    git commit--amend
    ,或者如果您想修复未发布的提交
现在的问题是,与r36、r37和r39相对应的提交不属于本地存储库上的
master
分支。但是,除非您非常不走运(或者运行了一个可以修剪悬挂提交的操作),否则提交数据应该仍然存在

我认为(在执行internet陌生人给您的任何命令之前,请备份您的git存储库),通过重新引入相应的代码(在新创建的提交对象中)可以解决您的问题

因此,以下命令应引入新的提交,以匹配缺少的修订:

git cherry-pick 52b140c 6fca0fa ca7ee4f
之后,您可以将其推送到github—带有正确消息的提交将出现在
主分支的末尾

编辑:我写上一个答案的前提是
--硬
重置已经完成。但是,如果重置是软重置,那么这意味着这些提交中的更改已经完成。在这种情况下,恢复提交只是在历史记录中重新引入这些提交的一种方式——这意味着将有一个历史重写,这可能是一个大麻烦,如果存储库已经被其他人拉

如果您可以重写历史记录,那么在提交任何未完成的更改并丢弃樱桃拣选后(例如,通过运行
git reset--hard 60c067e
,或者通过使用我告诉您的备份),您可以运行以下命令,在先前存在的提交后重新设置现有代码的基础:

# This command will reintegrate r39
git rebase 6fca0fa

# This command will reintegrate r36 and r37
git rebase ca7ee4f

在那之后,您将能够推送到github,但是您必须使用
--force
选项(因为一些现有的、已发布的提交将被删除)

查看reflog,我认为在r37之后执行了类似于
git reset HEAD~1
的命令(两次)这就解释了为什么
master
分支中缺少提交(
git reset--hard HEAD~1
会将HEAD指针移动到上一次提交,从而有效地从当前分支中删除最后一次提交)(显然,该命令以前用于修改r34)。某些源代码可能丢失,也可能不丢失(取决于是否在
git reset
中指定了
--hard

对未来的建议:

  • 当你想清理你的工作空间时,使用git reset--hard
,或者更好,不需要指定修订
  • 使用
    git commit--amend
    ,或者如果您想修复未发布的提交
  • 现在的问题是,与r36、r37和r39相对应的提交不属于本地存储库上的
    master
    分支。但是,除非您非常不走运(或者运行了一个可以修剪悬挂提交的操作),否则提交数据应该仍然存在

    我认为(在执行internet陌生人给您的任何命令之前,请备份您的git存储库),通过重新引入相应的代码(在新创建的提交对象中)可以解决您的问题

    因此,以下命令应引入新的提交,以匹配缺少的修订:

    git cherry-pick 52b140c 6fca0fa ca7ee4f
    
    之后,您可以将其推送到github—带有正确消息的提交将出现在
    主分支的末尾

    编辑:我写上一个答案的前提是
    --硬
    重置已经完成。但是,如果重置是软重置,那么这意味着这些提交中的更改已经完成。在这种情况下,恢复提交只是在历史记录中重新引入这些提交的一种方式——这意味着将有一个历史重写,这可能是一个大麻烦,如果存储库已经被其他人拉

    如果您可以重写历史记录,那么,在提交任何未完成的更改并丢弃关键点后(例如,通过运行
    git reset--hard 60c067e
    ,或者通过使用我告诉您的备份),您可以运行