独立HEAD状态下的本地提交

时间:2018-03-21 08:43:36

标签: git

我前段时间已经下载了一个git存储库,并继续在本地工作。我正在进行一些更改,偶尔会在本地提交。我也没有推动任何改变。我最后一次尝试提交时发现了一条消息(在pyCharm中,但我猜这是一个通用消息)。我不知道我做了什么来破坏我的存储库的混乱。

无论如何,消息是:

  

Git存储库   ... \ PycharmProjects \ tensorflow1 \ deeplab在   分离的HEAD状态。你可以环顾四周,做出实验性的改变   并提交它们,但一定要检查一个分支,不要丢失你的   工作。否则,您可能会失去更改。

由于我不熟悉所有的git术语,我对这个消息感到有点担心。据我所知,checkout将为我提供一个可以使用的远程git存储库版本,对吧?我只想拥有一个承诺的本地版本,所以checkout不是我想要的,对吧?

为了说清楚,我对获取原始git存储库的任何较新版本不感兴趣。我只想使用我的本地版本。所以,本地提交适合我。

我的结论是:

  1. 我不应该检查任何版本和
  2. 对我来说,本地提交是安全的(即使在这个独立的HEAD状态下)。
  3. 另外,如果以上是正确的,我怎样才能避免这种分离的HEAD状态?我应该创建一个我的本地git存储库的新分支并使用它?

    编辑:

    经过一番研究后,我发现我实际上已经对master(我应该处理的分支)和我独立的HEAD状态进行了更改。所以,当我尝试合并它们时(按照下面的答案),发生了一些冲突。因为,我满足于我当前的状态(除了是一个独立的HEAD)我还原了合并:

    git reset --hard HEAD
    

    并将我的代码保存在新分支中。因为,没有数据丢失的风险,这个解决方案让我满意。

2 个答案:

答案 0 :(得分:2)

分离头状态只表示您已检出提交,而不是分支。

这是完全安全的,但大多数时候你没有理由处于这种状态。

退出此状态的最佳方法是运行git checkout -b <new-branch>, 这可以让你以理智的方式继续工作。

这将创建一个指向当前检出的提交的分支指针,并将HEAD移动到此。

这将为您提供预期的情况。

好像你来自基于客户端/服务器的版本控制系统,比如SVN,这让你的理解变得混乱。

我会尝试在https://try.github.io运行教程,以便更好地感受Git。

您正在运行的风险是,如果您查看历史记录中的新点(即主人上的内容?),那么您如何回到现在正在处理的位置(独立的头状态)?

可以通过git reflog(高级,暂不调查此命令)。但是,您最终可能会遇到垃圾收集的情况。 (按照标准,这需要60-90天左右,所以目前不是一个问题)。

我希望这很有帮助。

TL; DR

  

在提交上创建一个分支并处理该分支。你很安全。

答案 1 :(得分:2)

分离的HEAD状态意味着您不在任何分支中。这就是您收到此错误消息的原因。

如果要验证是否是这种情况,请从终端/命令提示符

运行
git branch

你会看到你不在任何一个分支。

  • 首先,确保即使你被分开也承诺了所有的工作。
  • 现在,您希望通过运行git branch temp_state退出分离状态。这将创建一个新的分支,并将保持您当前的更改。
  • 现在,运行git checkout master返回到您应该使用的分支(如果它是主人,那么主人)。
  • git merge temp_state将您当前的工作合并到正确的分支。