"fatal: tag 'someTag' already exists",尝试向旧提交添加标签时

"fatal: tag 'someTag' already exists", when trying to add a tag to old commits

问题

为什么我不能为两个较旧的提交添加标签?

git tag -a matlabTest cfa84dbb6dd3c2c9956421e723d2f99786f7b417
git tag -a matlabTest 45b3a4d83eece8a5adcb947392f15a14bd4b0e63

相反,我得到:

fatal: tag 'matlabTest' already exists

似乎 Git 只想创建一个新标签而不是将标签链接到提交? (详情见下文)。


背景

我遵循了 git 书中的指南:https://git-scm.com/book/en/v2/Git-Basics-Tagging,这是我尝试过的(但失败了):

我输入 git log --pretty=oneline,显示三个提交:

cfa84dbb6dd3c2c9956421e723d2f99786f7b417 Preparing to make changes to changes.py to fix
45b3a4d83eece8a5adcb947392f15a14bd4b0e63 Tests: wholeseq analysis differs to Matlab
a894da22e2eb1c03930829622656ffd6da5ce161 Initial python scripts for analysis

我创建了一个标签 git tag -a matlabTest,现在我想将 "matlabTest" 添加到两个提交**。具体来说,就是上面显示的三个中的顶部和中间提交。

git tag -a matlabTest cfa84d
git tag -a matlabTest 45b3a4

现在,在这两种情况下,我都会收到以下错误:

fatal: tag 'matlabTest' already exists

但是当我通过输入 git show matlabTest 显示 'matlabTest' 标志时,我看到只有第一个提交被成功标记,我截断了输出,因为它很长,但在输出的末尾我看不到两个提交都被标记了:

tag matlabTest
Tagger: *foo (I did not want to show personal information)*
Date:   Fri Nov 25 02:37:41 2016 +0200

After testing dnds.py by comparing whole-seq dN/dS output to MATLABs dnds() output, both using NG, dnds.py seems to have a calculation error. So I have started to make changes to changes.py

commit 45b3a4d83eece8a5adcb947392f15a14bd4b0e63
Author: *foo (I did not want to show personal information)*
Date:   Fri Nov 25 02:20:27 2016 +0200

*...<remainder of script>*

额外背景

**为什么我要标记两个较旧的提交?因为我正在尝试调试一些静默错误(与我以前在 MATLAB 中编写的软件不一致),它是由两个脚本(changes.py 和 dnds.py)之一引起的,并且每个脚本都有指向它的不同提交(cfa84db 和 45b3a4d8)。我想标记这两个提交,以帮助我系统地处理这个错误。

A tag always reference one commit (in Git or other VCS, where its role is to unambiguously identify a特别修订)。
此处 (Git),提交表示其历史记录中某个时间点的完整回购状态。

对于您的情况,除了标记之外,您还有其他选择:

it is being caused by either one of two scripts (changes.py and dnds.py) and each has a different commit (cfa84db and 45b3a4d8)

您可以使用 git bisect 查明确切的错误提交,假设您可以编写一个表现出不良行为的测试。这将检测到引入错误的 first 提交。

如果您真的必须标记多个提交,请查看 git notes

当你用于两个不同的提交时,标签名称应该不同。

可以用标签名matlabTest.1和matlabTest.2来区分。你也可以 git tag -a matlabTest.1 cfa84d -m ‘describe the difference’.