撤销未推送的提交

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

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

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

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

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

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

编辑

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

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

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

enter image description here

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

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

在Sourcetree:

  1. 右键单击一个比您要删除的提交更老的提交,并选择“交互地重基xxxx的子元素…"”。你点击的那个就是你的“基地”。你可以修改之后的每一个提交。

截图-1

  1. 在新窗口中,选择你想要删除的提交,然后按下底部的“删除" -按钮,或者右键单击提交并单击“删除提交"
  2. 列表项
  3. 点击“好吧"(或“取消"如果你想中止)。

查看这个Atlassian博客文章以获得更多关于Sourcetree中交互式重基的信息。