Git 从任何分支都无法访问的标记引用提交是否会丢失?

Git 从任何分支都无法访问的标记引用提交是否会丢失?,git,git-push,git-tag,Git,Git Push,Git Tag,我在branchbranch上完成了我的项目。然后我又恢复使用 git revert tag-name 然后我取得了一些进步,并做出了承诺。当我尝试推送时,出现以下错误: 更新被拒绝,因为远程包含您所做的工作 本地没有 我不想在恢复之前丢失我的进度,但想从分支中删除之后所做的提交,并将它们保留在1.00.00rcXX标记下以供将来参考 我创建了一个存储库的克隆,在那里标记了分支的头,并将分支重新缠绕到恢复提交: git tag -a 1.00.00rcXX -m message git res

我在branch
branch
上完成了我的项目。然后我又恢复使用

git revert tag-name
然后我取得了一些进步,并做出了承诺。当我尝试推送时,出现以下错误:

更新被拒绝,因为远程包含您所做的工作 本地没有

我不想在恢复之前丢失我的进度,但想从
分支
中删除之后所做的提交,并将它们保留在
1.00.00rcXX
标记下以供将来参考

我创建了一个存储库的克隆,在那里标记了
分支
的头,并将
分支
重新缠绕到恢复提交:

git tag -a 1.00.00rcXX -m message
git reset --hard HEAD~1 # remove last commit from current branch
现在我想强制将我的更改推回到我的原始存储库,这样
分支之前的所有提交都将丢失

我的标记也会丢失,因为它是基于无法从
分支
访问的提交?

无法访问和垃圾收集的 只有真正无法访问的提交才能被垃圾收集,从而永远丢失

引述:

不可达对象

无法从分支、标记或任何其他引用访问的对象

只要标记存在,它链接到的历史部分就被认为是可访问的,因此不会被垃圾收集。标记使这些提交保持“活动”

推标签并用力推分支是安全的 Git试图阻止您在任何分支中进行非快进更改。您必须将
-f
选项传递到
git push
以在重置(倒带)分支后执行push。如果您记住,您可以同时推送引用分支原始状态的标记和分支的新头,并且不会丢失任何内容

只需运行以下命令:

git push --tags
git push -f origin your-rewound-branch
最好使用分支而不是标记 顺便说一句,对这样的事情使用tag可能不是一个好主意。也许有一天您会想删除开发历史中的死胡同部分,这是不应该使用标记的。使用分支(头)而不是标记更适合于此目的。只需使用(可能使用更具描述性的名称)

而不是

git tag -a 1.00.00rcXX -m message

@我确实希望在恢复之前丢失所有提交。我还想把它们保存在标签上,以备将来参考。但我当然不想在恢复之前合并任何提交,这就是我强制推送的原因。再次阅读你的问题,我想我终于明白了你想要表达的意思。您在存储库中进行了恢复和后续更改,然后克隆了此存储库,只是为了在克隆中创建
1.00.00rcXX
标记。对吗?“标签将使这些提交保持活动状态”回答了我的问题。你确定这是真的吗?我贴了一个答案。现在我正在考虑编辑你的Q,这样在没有这个评论的情况下它就有意义了。这件事和你发生的事一样吗<代码>git克隆'git://some.remote/repos'项目
和git checkout分支机构;git还原标记名;一些工作;git标记-1.00.00rcXX-m消息;git reset—硬头~5和现在的
分支
与紧跟在
git revert标记名之后的相同。此时,您正在询问在不丢失
1.00.00rcXX
标记所引用的历史记录的情况下强制推送分支是否安全。请编辑您的问题,以便对未来的访问者更有意义。如果我有什么错误,请随时澄清。
git tag -a 1.00.00rcXX -m message