如何在裸仓库中解除分支中最后几个提交?

时间:2011-09-14 14:33:43

标签: git

2 个答案:

答案 0 :(得分:6)

我还不清楚回购的位置。你说它是光秃秃的,但你必须在某个地方也有一个非裸露的地方。

如果您只想回放本地分支,则需要使用git reset。因此,如果您有一个本地分支beta,那么您可以像这样回放它:

$ git checkout beta
$ git reset --hard HEAD~2 

这将删除3次提交:HEADHEAD~1HEAD~2。这些将在大约90天内收集垃圾,因此 可以 在需要时将其恢复。

如果你有一个名为origin的远程仓库(这是裸的)并且你想在那里倒回分支,那么你可以通过强制执行此操作推。假设您在准备好之前在beta上推送了3次提交。您可以将它们保存在本地项目中,但将其从远程裸存储库中删除,如下所示:

$ git push -f origin beta~3:beta

对于使用该存储库的其他人来说,这可能会很苛刻,但听起来你可以这么做。

如果你只有有一个裸仓“那么你可以像这样强行重置分支:

$ git branch -f beta beta~3

注意:这也适用于倒带本地分支的第一种情况。同样,这对使用此回购的任何人都不友好。

答案 1 :(得分:5)

这取决于你想做什么。 git revert将在您的存储库中生成 new 提交,以撤消所选提交所做的更改。从变更跟踪的角度来看,这很好 - 您可以看到还原的内容以及原因,您可以随时重新考虑您的决定。

您可以运行git reset(没有--soft,这只在工作副本中有意义),只需将存储库重置回以前的状态即可。这会在您选择的提交后丢弃提交,因此您将永远丢失该历史记录。如果有人拥有存储库的远程工作副本,他们会突然发现他们的工作副本不同步(他们可能会在运行git push时无意中重新引入这些更改。)

如果它是您自己的存储库并且您没有与其他任何人共享,git reset就可以了。否则,git revert可能是更好的选择,因为它会在存储库历史记录中留下痕迹并与远程工作副本进行良好的交互。