我正在使用Sourcetree for Windows的git库,并希望撤消未推送的提交。

这可能吗?如果我做了“还原提交”,它会创建第二个提交来还原第一个提交,但我不希望第一个提交出现在我的源代码控制中。

我也可以删除我的本地存储库,并在不进行本地提交的情况下再次拉出它,但也许还有另一种方法?


右键单击你想要重置的提交(不是你想要删除的提交!) 选择“Reset master to this commit” 选择“软”复位。

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

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

Edit

关于git revert:该命令创建一个新的提交,该提交将撤销其他的提交。例如,如果你有一个提交,它添加了一个新文件,git revert可以用来做一个提交,它将删除新文件。

关于应用软重置:假设你有提交a到E (a——B——C——D——E),你想删除最后一次提交(E)。然后你可以做一个软重置来提交D。通过软重置,提交E将从git中删除,但本地更改将被保留。在git重置文档中有更多的例子。


如果你选择了想要还原到的日志条目,那么你可以点击“重置到此提交”。只有在没有反向提交更改时才使用此选项。如果您担心丢失更改,那么您可以使用软模式,这将留下一组未提交的更改(即您刚刚更改的内容)。使用混合将重置工作副本,但保留这些更改,而硬拷贝将完全摆脱更改。以下是一些截图:


如果你在另一个分支上,你需要先“check to this commit”你想要删除的提交,然后“reset current branch to this commit”选择之前的提交,才会起作用。


如果你想要删除一个提交,你可以把它作为交互式rebase的一部分来做。 但要谨慎行事,这样你才不会搞砸你的回购。

在Sourcetree:

右键单击一个比您想要删除的更老的提交,并选择“交互式地Rebase children of xxxx…”。你所点击的将是你的“基础”,你可以对之后的每一次提交进行修改。

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

查看这篇Atlassian博客文章,了解更多关于Sourcetree中的交互式重基。