我前段时间已经下载了一个git存储库,并继续在本地工作。我正在进行一些更改,偶尔会在本地提交。我也没有推动任何改变。我最后一次尝试提交时发现了一条消息(在pyCharm中,但我猜这是一个通用消息)。我不知道我做了什么来破坏我的存储库的混乱。
无论如何,消息是:
Git存储库 ... \ PycharmProjects \ tensorflow1 \ deeplab在 分离的HEAD状态。你可以环顾四周,做出实验性的改变 并提交它们,但一定要检查一个分支,不要丢失你的 工作。否则,您可能会失去更改。
由于我不熟悉所有的git术语,我对这个消息感到有点担心。据我所知,checkout将为我提供一个可以使用的远程git存储库版本,对吧?我只想拥有一个承诺的本地版本,所以checkout不是我想要的,对吧?
为了说清楚,我对获取原始git存储库的任何较新版本不感兴趣。我只想使用我的本地版本。所以,本地提交适合我。
我的结论是:
另外,如果以上是正确的,我怎样才能避免这种分离的HEAD状态?我应该创建一个我的本地git存储库的新分支并使用它?
编辑:
经过一番研究后,我发现我实际上已经对master
(我应该处理的分支)和我独立的HEAD状态进行了更改。所以,当我尝试合并它们时(按照下面的答案),发生了一些冲突。因为,我满足于我当前的状态(除了是一个独立的HEAD)我还原了合并:
git reset --hard HEAD
并将我的代码保存在新分支中。因为,没有数据丢失的风险,这个解决方案让我满意。
答案 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
将您当前的工作合并到正确的分支。