在我的回购协议中披露一些缺失的git提交
我的项目文件夹当前最新版本(r41) 我记得我曾试图提交一些38版的文件来进行重构,但在我对代码做了一些其他更改并最终提交到r38(我使用git-reset soft HEAD~1)之后,我不得不取消未发布(尚未推送)的提交 我在r41继续工作直到项目完成。现在,我想查看一些代码,发现中缺少旧的提交(r36、r37) 我在过去学习了一些关于Git的知识,但在几个月专注于开发之后,我似乎忘记了一些Github知识,显然想用Github戏剧来缩短它(太多的命令和解释,也不会造成混乱,它们确实需要时间来获得充分的理解和清晰,以避免输入错误的命令) 直截了当地说,根据我目前的情况,我不想创建任何分支。我想保留相同的主控,并在我的回购协议上显示r36、r37。在我的回购协议中披露一些缺失的git提交,git,github,Git,Github,我的项目文件夹当前最新版本(r41) 我记得我曾试图提交一些38版的文件来进行重构,但在我对代码做了一些其他更改并最终提交到r38(我使用git-reset soft HEAD~1)之后,我不得不取消未发布(尚未推送)的提交 我在r41继续工作直到项目完成。现在,我想查看一些代码,发现中缺少旧的提交(r36、r37) 我在过去学习了一些关于Git的知识,但在几个月专注于开发之后,我似乎忘记了一些Github知识,显然想用Github戏剧来缩短它(太多的命令和解释,也不会造成混乱,它们确实需要时
我应该输入什么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
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
,或者如果您想修复未发布的提交master
分支。但是,除非您非常不走运(或者运行了一个可以修剪悬挂提交的操作),否则提交数据应该仍然存在
我认为(在执行internet陌生人给您的任何命令之前,请备份您的git存储库),通过重新引入相应的代码(在新创建的提交对象中)可以解决您的问题
因此,以下命令应引入新的提交,以匹配缺少的修订:
git cherry-pick 52b140c 6fca0fa ca7ee4f
之后,您可以将其推送到github—带有正确消息的提交将出现在主分支的末尾
编辑:我写上一个答案的前提是--硬
重置已经完成。但是,如果重置是软重置,那么这意味着这些提交中的更改已经完成。在这种情况下,恢复提交只是在历史记录中重新引入这些提交的一种方式——这意味着将有一个历史重写,这可能是一个大麻烦,如果存储库已经被其他人拉
如果您可以重写历史记录,那么,在提交任何未完成的更改并丢弃关键点后(例如,通过运行git reset--hard 60c067e
,或者通过使用我告诉您的备份),您可以运行