如何将master分支还原为git中的标签?


87

我们有分支机构的起源和发展。master的初始状态标记为tag_ABC

我们几乎没有对developer分支进行任何更改并将其推向原点。然后,我们无意中将开发合并为大师并推向了起源。

现在我们想将master还原到检查点tag_ABC。我们该怎么做?

Answers:


159

你可以做

git checkout master
git reset --hard tag_ABC
git push --force origin master

请注意,这将覆盖上游存储库中的现有历史记录,并可能对签出该存储库的其他开发人员造成问题。


5
这样,所有分支将被强行推动。您可能需要尝试git push --force origin master
danza

1
作为参考,要恢复到先前的提交,您可以执行git reset --hard HEAD^
Geoff

1
git reset --hard HEAD^可以多次使用BTW一次回退一个提交,然后git push --force origin master可以使用它(如果它位于远程位置)。
路加·温克

还将其他人的本地副本的master分支重置为较早版本,git pull以及git reset --hard origin/master
Luke Wenke

恢复后的一些建议可以告诉团队:从主分支那里拉!!谢谢!!
JRichardsz '16

88

这不是问题的直接答案,但是在搜索将分支的代码还原为标签版本的方法时,此页面会返回。

另一种方法是在分支的当前状态和要还原到的标记之间创建差异,然后将其应用于分支。这样可以确保版本历史记录正确无误,并显示所做的更改,然后再返回。

假设您的分支称为master,而您想返回的标签称为1.1.1

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master

19
这应该是可以接受的答案,因为它可以保持历史记录完整,并且不会对已签出回购协议的其他人造成问题。
OpenUserX03

1
这看起来很优雅。但是我试图将qa分支还原为先前的标签,并且仅收到补丁失败消息。$ cat ../diff_qa.patch | git apply <stdin>:55:尾随空白。<stdin>:336:尾随空白。<stdin>:12692:尾随空白。<stdin>:12695:尾随空白。<li> {{$ tag ['rank'] + 1}}:<stdin>:12706:尾随空白。错误:补丁程序失败:.env.wholo:1
rickatech '16

我尝试了几种解决方案,但没有一个可行。这个作品就像一种魅力。非常感谢
@John

这是正确的方法。它是无损的,并且保留了完整的历史
Nitin Bansal

这对我不起作用。我可以运行前三个命令而没有任何问题,但是当我这样做时cat ~/diff.patch | git apply,它会告诉我error: unrecognized input。任何的想法?@NitinBansal也许是因为您最近发表了评论?
Experience111
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.