我想提交并推送更改到远程,但我与标签分离。我如何只使用标签的名称并形成git命令,重新连接分离它的头部,并提交并推送到远程?
答案 0 :(得分:2)
我如何[...]重新连接从[...]分离的头部?
git branch
的输出
* (detached from <tag>)
<possibly other branches...>
表示您已运行git checkout <tag>
。您的情况类似于以下
HEAD指向的不是分支,而是直接到提交(标记<tag>
也指向的那个,但是在该点旁边):你处于分离-HEAD状态。要重新连接HEAD,您需要将其指向分支,您可以通过运行
git checkout <branch-in-question>
但是,如果您没有处于干净的工作状态,Git通常会阻止您检查分支机构。这就是stashing派上用场的地方。 Stashing类似于整理你的桌面,暂时将所有东西放在抽屉里,只在需要的时候在后期检索这些东西。
在这里,您应该运行
git stash save
git checkout <branch-of-interest>
git stash pop
解决由于最后一个命令而产生的任何冲突。在上面的例子中,你的回购将会是这样的,
在工作树中进行本地更改。然后,您可以将这些更改,提交和推送到远程。
答案 1 :(得分:2)
除了Jubobs' (correct) answer之外,值得注意的是,git会在HEAD
的git reflog中更新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
来了解我当前的&#34;分离的HEAD&#34;州。这里v2.2.1
是一个标签。为了回到我之前所处的分支,我可以简单地观察到reflog说我从主人那里移动了#34;所以我只需要:
git checkout master
我将回到分公司主人那里。
(请注意,如果我在这里做了一些新的提交,那么除了我可以在reflog中再次找到它们之外,它们会失去它们。另外,如果我已经对它进行了更改在工作目录中,git checkout master
步骤可能会抱怨更改为分支master
会丢失我的更改。在这种情况下,提交,存储和/或创建新分支通常是正确的做法。)
答案 2 :(得分:1)
我会在你创建一个分支,提交你的更改,checkout 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