【问题标题】:Sourcetree - undo unpushed commitsSourcetree - 撤消未推送的提交
【发布时间】:2014-05-26 07:56:14
【问题描述】:

我正在将 Sourcetree for Windows 用于 git-repository,并希望撤消未推送的提交。

这可能吗?如果我“恢复提交”,它会创建第二个提交来恢复第一个提交,但我不希望第一个提交出现在我的源代码管理中。

我也可以删除我的本地存储库并在没有本地提交的情况下再次拉取它,但也许还有其他方法?

【问题讨论】:

标签: version-control atlassian-sourcetree


【解决方案1】:
  1. 右键单击您要重置的提交(不是您要删除的提交!)
  2. 选择“将 master 重置为此提交”
  3. 选择“软”重置。

软重置将保留您的本地更改。

来源:https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

编辑

关于git revert:此命令创建一个新的提交,该提交将撤消其他提交。例如。如果您有一个添加新文件的提交,git revert 可用于进行提交,这将删除新文件。

关于应用软重置:假设您有提交 AE (A---B---C---D---E),并且您想删除最后一个提交 (E)。然后您可以进行软重置以提交 D。使用软重置提交 E 将从 git 中删除,但将保留本地更改。 git reset documentation中还有更多例子。

【讨论】:

  • 或者如果你在一个分支上工作——“将当前分支重置到这个提交”
  • 我非常不明白这些 UI 解释... 将当前分支重置为该提交,听起来并不会删除该提交。它最终做了你所期望的更多。它将我的工作副本重置为提交,而不是删除它。
  • 我同意@MrFox。在我这样做之后,我不想要的提交仍然显示在树中。
  • @Timmmm:新的解释有帮助吗?
  • 实际上我意识到我已经将我的提交推送到了 github。我找到了an article that explains how to "rewrite history",但似乎麻烦多于值得!
【解决方案2】:

如果您选择要恢复到的日志条目,则可以单击“重置到此提交”。仅当您未推送反向提交更改时才使用此选项。如果您担心丢失更改,则可以使用软模式,这将留下一组未提交的更改(您刚刚更改的内容)。使用混合重置工作副本但保留这些更改,并且硬将完全摆脱更改。下面是一些截图:

【讨论】:

  • 如果你仍然看到一个图标显示 Push 可以从你之前的提交中获得(你刚刚清除了它),pull 和 Sourcetree 似乎更新了 UI。
【解决方案3】:

如果您想删除一个提交,您可以将其作为交互式 rebase 的一部分进行。 但请谨慎行事,以免最终弄乱您的存储库。

在源树中:

  1. 右键单击比您要删除的提交更早的提交,然后选择“Rebase children of xxxx interactive...”。您单击的那个将是您的“基础”,您可以更改之后所做的每个提交。

  1. 在新窗口中,选择要删除的提交,然后按底部的“删除”按钮,或右键单击提交并单击“删除提交”。
  2. 列表项
  3. 点击“确定”(如果要中止,请点击“取消”)。

查看Atlassian blog post,了解有关 Sourcetree 中交互式变基的更多信息。

【讨论】:

  • 这是我一直在寻找的答案,完全按照需要工作。
  • 错误:无事可做 知道为什么会这样吗?
【解决方案4】:

如果您在另一个分支上,您需要先“检查到此提交”以查找要删除的提交,然后只有“将当前分支重置到此提交”选择以前的 wright 提交,才会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2021-01-03
    • 2022-05-31
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多