gpt4 book ai didi

git - 为什么在分离状态下使用 `git commit`?

转载 作者:太空狗 更新时间:2023-10-29 12:52:50 26 4
gpt4 key购买 nike

使用 git log 我发现了我想要处理的项目的旧版本。我执行了 git checkout version52 导致项目处于“分离”状态,进行了一些更改,然后对它执行了 git commit。我没有意识到这会在分离状态下提交。

在此之后,我使用 git checkout master 返回到我的 master,但是当我执行 git log 时,我的更改不再显示。我现在意识到更改停留在我的 version52 中。

我可以使用 git merge version52 轻松应用这些更改,但我只是想知道,能够在 git 中以分离状态提交有什么意义?作为新手,这让我困惑了一段时间,我不明白为什么允许这样做,或者何时使用这样的功能。

编辑:抱歉,我之前写过“断开连接”,但我的意思是“分离”。在 git 中,当您决定查看以前 checkin 的项目版本时,就会发生这种情况。

最佳答案

为了将来,你应该创建一个分支来工作

git branch branchName version52
git checkout branchName

git checkout -b brannchName version52

评论后编辑

我写过的 git 对象模型 here ,简单地跟踪对象树。分支是指向提交的指针。尽管这两者是相关的,但您不必有一个分支指向一行提交的末尾。

当您创建一个提交时,您仍然在创建一个对象树,该树将存在于存储库中,直到它变旧并且您运行 git-gc 来清理这些孤立的提交。我认为您担心的是没有强制要求在分支机构中进行提交。这在有时吸引用户的工具中创造了灵 active ,但 git 是一种高级工具。

在你的例子中,你做了一个提交,然后回到你的主分支,你认为你已经丢失了你的提交,但是如果你查看了 git reflog 的输出你会看到你创建的提交的 sha,即使它不在分支上。您可以通过 git branch branchName <sha of commit> 在此处创建一个分支.或者您可以将这些提交与另一个分支 merge 或重新定位到另一个分支,而无需为此创建和删除分支的额外步骤。好的,这只是几个额外的步骤,只需几次按键;但它在少数情况下很有用。

问题在于,分支只是提交树的简写,就像标记是特定提交的简写一样。除了当您在分支上进行提交时,分支指针会随着最新的提交而移动。

总是有 head指向最新提交的指针,您已 checkout ,因此您永远不会真正“断开连接”

关于git - 为什么在分离状态下使用 `git commit`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4469436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com