我在我的项目上工作,在branch
分支上。然后我使用
git revert tag-name
然后我做了一些进展并承诺。当我试图推动时,我得到了这个错误:
更新被拒绝,因为遥控器包含您所做的工作 没有本地
我不希望在还原之前丢失我的进度,但希望从branch
之后的提交中删除,保留它们以供将来参考1.00.00rcXX
标记。
我创建了一个存储库的克隆,在那里标记了branch
的头部,然后将branch
倒回到恢复提交中:
git tag -a 1.00.00rcXX -m message
git reset --hard HEAD~1 # remove last commit from current branch
现在我想强制将我的更改推送回原始存储库,因此branch
之前的所有提交都将丢失。
我的代码也会丢失,因为它基于branch
无法访问的提交吗?
答案 0 :(得分:3)
只有真正无法访问的提交才能被垃圾收集,因而永远丢失。
无法访问的对象
无法从分支,标记或任何其他引用访问的对象。
只要标记存在,它链接到的历史部分就被认为是可达的,因此不会被垃圾收集。标签使这些提交保持“活着”。
Git试图阻止您在任何分支中进行非快进更改。您必须将-f
选项传递给git push
以在重置(倒带)分支后执行推送。如果你记住implications of overwriting history,你可以推动引用分支原始状态的标签和分支的新头部,你将不会失去任何东西。
跑吧:
git push --tags
git push -f origin your-rewound-branch
顺便说一句,使用标签来表示这样的事情可能不是一个好主意。可能你有一天会想要删除开发历史的那个死胡同部分,你不应该用标签来删除它。使用分支(头部)而不是标签更适合于此目的。只需使用(可能使用更具描述性的名称)
git branch 1.00.00rcXX
而不是
git tag -a 1.00.00rcXX -m message