这个question似乎是用来处理来自主分支的提交的倒带。我可以在存储库中的分支上使用类似的git reset --soft命令吗?还是应该尝试理解git revert?
最终,我希望在空闲的repo中通过两个或三个提交(而不仅仅是最后一个)来倒回两个分支。
发布于 2011-09-14 23:24:35
我还是不清楚回购在哪里。你说它是裸露的,但你一定也有一个非裸露的地方。
如果你只想倒带本地分支,那么你可以使用git reset。因此,如果你有一个本地分支beta,那么你可以像这样倒带它:
$ git checkout beta
$ git reset --hard HEAD~2 这将丢弃3个提交:HEAD、HEAD~1和HEAD~2。它们将在大约90天内得到垃圾收集,因此如果需要,您可以获取它们。
如果你有一个叫做 origin 的远程repo (它是空的),并且你想要在那里倒带分支,那么你可以通过强制推送来实现。假设你在beta上推送了3个提交,在它们准备好之前。您可以将它们保留在本地项目中,但将它们从远程裸存储库中删除,如下所示:
$ git push -f origin beta~3:beta这对使用该存储库的其他人来说可能很苛刻,但听起来您对此没有意见。
如果您有一个空的存储库,那么您可以强制重置分支,如下所示:
$ git branch -f beta beta~3注意:这也适用于倒带本地分支的第一种情况。同样,这对使用此repo的任何人都是不友好的。
发布于 2011-09-14 22:40:45
这取决于你想做什么。git revert将在您的存储库中生成新的提交,以撤销您选择的提交所做的更改。从更改跟踪的角度来看,这很好--您可以看到恢复的内容和原因,并且可以在以后重新考虑您的决定。
您可以运行git reset (不带--soft,这只在工作副本中有意义),简单地将存储库重置回以前的状态。这会在您选择提交之后丢弃提交,因此您将永远丢失该历史记录。如果有人拥有存储库的远程工作副本,他们会突然发现他们的工作副本不同步(当他们运行git push时,他们可能会无意中重新引入更改)。
如果它是您自己的存储库,并且您没有与其他任何人共享它,那么git reset是很好的。否则,git revert可能是更好的选择,因为它在存储库历史中留下了痕迹,并且与远程工作副本进行了很好的交互。
https://stackoverflow.com/questions/7418095
复制相似问题