繁体   English   中英

当head为*时,如何将更改提交到分支 <tag> )”

[英]How to commit changes to a branch when head is “* (detached from <tag>)”

我想提交更改并将其推送到远程,但是我与标签分离。 我该如何仅使用标签的名称并形成git命令,以重新附加与之分离的头部,然后提交并推送到远程?

我该如何将头从[...]拆下,重新安装?

git branch的输出为

* (detached from <tag>)
  <possibly other branches...>

表示您已经运行了git checkout <tag> 您的情况如下

在此处输入图片说明

HEAD指向的不是分支,而是直接指向提交(标记<tag>也指向该提交,但仅次于该提交):您处于分离HEAD状态。 要重新连接HEAD,您需要使其指向分支,可以通过运行

git checkout <branch-in-question>

但是,如果您的工作状态不干净,Git通常会阻止您检出分支。 那就是藏起来很方便的地方。 存放类似于通过将放在桌子上的所有物品暂时放在抽屉中来整理桌子,只是在以后需要时才将其取回。

在这里,你应该跑

git stash save
git checkout <branch-of-interest>
git stash pop

解决由最后一条命令引起的任何冲突。 在上面的示例中,您的存储库将如下所示:

在此处输入图片说明

在工作树中进行本地更改。 然后,您可以进行这些更改,提交并推送到远程。

除了Jubobs'(正确)的答案 ,这是值得注意的是git的记录HEAD在Git的更新引用日志HEAD

您可以简单地运行git reflog (没有额外的参数)来查看类似的内容(您的时间可能更长):

9b7cbb3 HEAD@{0}: checkout: moving from master to v2.2.1
c5b9256 HEAD@{1}: checkout: moving from maint to master
c2e8e4b HEAD@{2}: checkout: moving from master to maint
c5b9256 HEAD@{3}: merge refs/remotes/origin/master: Fast-forward
c18b867 HEAD@{4}: clone: from git://github.com/git/git

这显示了我在git本身的源克隆中所做的所有动作。 您可以看到我做了一个git checkout maint ,然后是git checkout master ,然后是git checkout v2.2.1以达到我当前的“分离式HEAD”状态。 这里v2.2.1是一个标记。 回到以前的分支,我可以简单地看到reflog指出我是“从master”迁移的,所以我只需要:

git checkout master

我将回到分公司主管。

(请注意,如果我在此处进行了一些新的提交,这会“丢失”它们,除了我可以在引用日志中再次找到它们。此外,如果我对工作目录进行了更改,则git checkout master步骤可能会抱怨更改为分支master会丢失我的更改。在这种情况下,提交,存储和/或创建新分支通常是正确的选择。

我将在您所在的位置创建一个分支,提交更改,签出master,然后将新分支合并到master。

git branch my-temporary-branch
git commit -m "my temp work"
git checkout master
git merge my-temporary-branch
git branch -d my-temporary-branch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM