为什么在处于分离状态时使用`git commit`?

Lan*_*Lan 8 git

使用git log我找到了我想搞砸的项目的旧版本.我确实git checkout version52导致项目处于' 分离 '状态,进行了一些更改,然后git commit对其进行了修改.我没有意识到这会在一个独立的状态下进行.

在此之后我回到了我的主人那里git checkout master但是当我做git log我的改变时不再出现了.我现在意识到变化被困在我的身上version52.

我可以很容易地应用这些更改,git merge version52但我只是想知道,能够在git中以分离状态提交的重点是什么?作为一个新手,这让我困惑了一段时间,我不明白为什么允许,或何时使用这样的功能.

编辑:对不起,我以前写过"断开连接",但我的意思是"超然".在git中,当您决定查看以前签入的项目版本时会发生这种情况.

Abi*_*ern 6

对于未来,您应该创建一个分支来解决问题

git branch branchName version52
git checkout branchName
Run Code Online (Sandbox Code Playgroud)

要么

git checkout -b brannchName version52
Run Code Online (Sandbox Code Playgroud)

评论后编辑

我在这里写的git对象模型只是跟踪一个对象树.分支是指向提交的指针.虽然这两者是相关的,但你不必有一个分支指向提交行的提示.

创建提交时,您仍然在创建存储库中存在的对象树,直到它变旧并运行git-gc来清理这些孤立的提交.我认为您担心的是在分支机构中没有强制要求提交.这为工具创造了灵活性,有时会捕获用户,但git是一种高级工具.

在你的情况下,你做了一个提交,然后回到你的主分支,你认为你已经丢失了你的提交,但如果你看了输出,git reflog你会看到你创建的提交的sha,即使它没有分店.你可以在这里创建一个分支git branch branchName <sha of commit>.或者您可以将这些提交合并或重新绑定到另一个分支,而无需执行为此创建和删除分支的额外步骤.好吧,所以这只是几个额外的步骤,只需几次按键; 但它在少数情况下很有用.

问题是分支只是提交树的简写,就像标记是特定提交的简写一样.除了在分支上进行提交时,分支指针随最新提交一起移动.

总有一个head指向最新提交的指针,你已经签出,所以你永远不会真正"断开连接"