【问题标题】:How can I uncommit the last few commits from a branch in a bare repo?如何取消提交来自裸仓库中分支的最后几个提交?
【发布时间】:2011-11-17 02:24:52
【问题描述】:

这个question 接缝处理从主分支倒回提交。我可以在 repo 的一个分支上使用类似的git reset --soft 命令,还是应该尝试理解git revert

最终我想在裸仓库中通过两个或三个提交(不仅仅是最后一个)来回退两个分支。

【问题讨论】:

  • 你的意思是你推送到一个裸仓库并且你想要那个(远程的)裸仓库让它的分支重绕吗?
  • @Pal Notz:是的。这是我的仓库,所以我不担心会欺骗其他用户。

标签: git


【解决方案1】:

我仍然不清楚回购在哪里。你说它是裸露的,但你一定也有一个非裸露的地方。

如果您只想倒带本地分支,那么您想使用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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 那么肯定是git resetgit-reset <SHA-HASH>SHA-HASH 之后是否保留该分支上的所有提交未引用? (即删除?)
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2011-05-11
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多