git切换并返回到旧状态/从旧状态返回

git切换并返回到旧状态/从旧状态返回,git,git-checkout,revert,Git,Git Checkout,Revert,我需要切换到较旧的提交,以检查我们的程序的较旧功能,该功能后来已被删除 为此,我签出相应的提交: git checkout 367af0345d0b09ab3ade1c7856462f68e5eafe86 然后我修改了一些关于这个不推荐使用的功能的代码。但这只是为了检查,我想忽略所有这些 现在验证完成了,我想回到最新的工作代码: git checkout master 但不幸的是,我收到了一个听起来很糟糕的警告: git checkout master Checking out files:

我需要切换到较旧的提交,以检查我们的程序的较旧功能,该功能后来已被删除

为此,我签出相应的提交:

git checkout 367af0345d0b09ab3ade1c7856462f68e5eafe86
然后我修改了一些关于这个不推荐使用的功能的代码。但这只是为了检查,我想忽略所有这些

现在验证完成了,我想回到最新的工作代码:

git checkout master
但不幸的是,我收到了一个听起来很糟糕的警告:

git checkout master
Checking out files: 100% (281/281), done.
Warning: you are leaving 183 commits behind, not connected to
any of your branches:

  367af03 message
  e5eee29 message
  6999d77 message
 ... and 179 more.

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

 git branch new_branch_name 367af0345d0b09ab3ade1c7856462f68e5eafe86

Switched to branch 'master'
事实上,我想保留最后183次提交,但我不想创建新的分支,只是回到临时恢复之前的状态

问题是,现在这183个提交实际上出现在我的代码中,所以它们并没有像警告所说的那样丢失


我错过了什么?

你签出了一个修订版,git肯定告诉你:

你处于“超脱的头部”状态。你可以四处看看,做实验 更改并提交它们,您可以放弃在此过程中所做的任何提交 通过执行另一个签出,在不影响任何分支的情况下进行状态设置

如果要创建新分支以保留创建的提交,可以 再次将-b与checkout命令一起使用(现在或以后)。例如:

git签出-b新分支机构名称

然后,您在此分离头状态下执行了一些提交,这些提交在任何分支上都不存在

然后,您再次签出
master
,将这些提交留在后面

做什么取决于你需要什么:

  • 如果你只是想检查一下,那么一切都很好。悬空提交将由git gc清理
  • 如果您需要提交(例如,如果
    367af0
    指向您的软件的发布版本,并且您正在为此旧版本创建修复程序),那么您应该按照git的指示执行:检查保存这些修复程序的新分支

将来,如果你只想在某个版本上玩游戏,直接在git签出之后,做一个git签出-b tmp_playing_(tmp_playing_)(tmp_playing_)(tmp_playing_)(tmp_playing_)之类的事情,以避免头部分离状态出现问题。

(1)首先,您是如何想出
367af0345d0b09ab3ade1c7856462f68e5eafe86
的?(2) 如果您尝试
git分支-包含367af0345d0b09ab3ade1c7856462f68e5eafe86
git标记-包含367AF0345D0B09AB3ADE1C78562F68E5EAFE86
,是否有一个打印内容?警告意味着至少
分支--contains
输出必须为空…我在github上以图形方式提出了这个提交哈希。两个git分支
返回
*master`并且git标记输出为空。这很奇怪:如果
367af03…
包含在
master
中,
git checkout
不应该抱怨,应该说它正在移动到
master
,前一个磁头在SHA-1.Mmmmh处分离。检查分离的磁头后,我对代码进行了一些修改,但没有提交任何内容。根据我的历史记录,我所做的是在不将更改推送到服务器的情况下隐藏和提交一些东西,并且只有在这之后才检查分离的头部。这可能是我得到这个的原因吗?