2013-04-25 52 views
1

我刚学会如何还原分支。这工作正常。事情是,我标记了主人的提交,并且我打算使用git describe命令来创建基于最新标记的部署。还原提交创建一个新的提交,所以git describe命令输出与提交ammend标签,就像这样:还原分支更改git的标记名称描述

前:

git describe 
1-2-0 

恢复“回”到在此之后提交:

git describe 
1-2-0-1ga99ae04 

有没有办法解决这个问题?或者我应该得到不同的最新标签?

+0

你想要什么样的行为?看起来你不希望Git告诉你,如果在此之后提交了1-2-0标记,并且没有任何更改,即使某些提交反转了其他一些提交。如果你想回到1-2-0标签,只需'git checkout 1-2-0'。 – 2013-04-25 14:08:30

+0

是的,我明白你的意思。我不能只检出1-2-0标签,因为我想将分支实际恢复到该状态。我希望它完全恢复的行为并使主分支处于1-2-0状态。 – Kriem 2013-04-25 14:22:17

回答

1

只是要清楚。你真的没有回复“回来”。假设你有以下历史。

A<--B<--C<--D 
      | 
     (tag:1-2-0) 

现在说你回复C。这是发生了什么事。

A<--B<--C<--D<--E 
      | 
     (tag:1-2-0) 

正如你所看到的,你已经向前迈进了历史。如果这个标签已经被释放,那么你可能想要考虑这个“修补程序”,并再次标记为1-2-0-1,或沿着这些线。不知道你的版本号方案是什么,所以显然只是在你的过程中使用修补程序。

考虑到此更改,修复程序会导致此问题。

  (tag:1-2-0-1) 
       | 
A<--B<--C<--D<--E 
      | 
     (tag:1-2-0) 

但是,如果您还没有公布,甚至推这个标签到远程,只是要移动的标签指向E,那么你可以做这两种方式。易于记忆的方式是删除标签并重新创建。

git tag -d 1-2-0 
git tag 1-2-0 E 

越短,速度更快,但无限的不太友好的方式来改变标签而不删除它是使用update-ref

git update-ref refs/tags/1-2-0 E 

在奇怪的情况下,您已经将标签推入并希望将其从远程移除,请使用以下语法。

git push <remote> :1-2-0 

假设原产地是您的遥远。

+0

这非常好解释。谢谢! – Kriem 2013-04-25 17:41:11

+0

难道你不能将标签和头部移回C吗? – jtchitty 2014-01-24 22:14:57

+0

@jtchitty - 你当然可以,但你必须使用上述方法之一来做到这一点。所描述的这些方法在任何时候需要更改标签时都应该一样。只要记住标签是无头的,所以当你添加提交时,不会有HEAD,就像它在分支中那样。您必须通过重新创建标签或使用update-ref手动更新标签。 – eddiemoya 2014-01-24 23:09:16