使用 SourceTree 删除提交

Deleting commits with SourceTree

我是 Git 的新手,我只了解如何将它与 SourceTree 一起使用(一点点)

我的分支图是这样的:

 o   Commit E is origin/test and (local) master
 |
 | o Commit D is origin/master
 | |
 | o Commit C
 | |
 | o Commit B
 |/
 o   Commit A
 |

现在,我想:

但我在 SourceTree 中找不到正确的按钮和命令。

你想要做的是将你的(本地)master 分支推送到 origin--force 来表示你想要重写历史。 即:您知道您的更改会导致 origin/master 分支丢失历史记录(3 次提交 B、C、D),而您不在乎。

我对 sourcetree 的了解还不足以告诉你这样的操作是否可行,GUI 一直在发展,他们每个月都会添加新的功能来支持更多的操作,但你总是可以打开 git 来自 sourcetree 的控制台(至少在 1.3 之前有一个图标可以做到这一点)并输入 :

git push --force origin master

这会将您的(本地)主分支推送到其跟踪分支(应该是 origin/master)。

N.B:我不知道您是如何配置 SourceTree 的,但是如果您依赖 https 与服务器通信,您可能需要输入 login/password.

编辑 1:

如果您还想删除 origin/test,您可以通过右键单击 sourceTree 中的分支(在 remotes 下)并选择删除来执行此操作:

https://answers.atlassian.com/questions/65053/how-do-you-remove-branches-from-source-tree

编辑 2:

显然 push --force was/will 的 GUI 选项被添加到版本 1.7

作为更笼统的回答:Whosebug 不是 google。 SourceTree 是由 Atlassian 支持的免费商业软件。他们支持你。他们有一本不错的手册和足够多的用户群,不会成为第一个想知道如何做 X 的新手。只是 google 它。

不知道如何使用 SourceTree 执行此操作。正如其他人所说:使用命令行:

git checkout master               # master points at COMMIT E
git push -f origin master:master  # forced push to origin so that masters are equal
git push origin :test             # delete origin/test

不需要按钮。

不确定这是否已解决但遇到了类似的问题并使用源代码树解决如下:

您可以使用 "Reverse Commit..." 选项(当您右键单击该选项时提交)从最新的提交 D 开始的每次提交。不要推送任何更改,并且对 C 和 B 一个一个地使用反向提交。在这 3 次反向之后,origin/master 分支上的代码将与提交 A 相同。现在将更改推送到远程仓库(分支 origin/master)。将 origin/test 合并到 origin/master。现在 origin/master 位于提交 E。按下此按钮,当您位于 origin/master 分支时,您可以删除 origin/test 分支。
P.S.: 唯一的问题是你会看到分支上的还原提交但代码将是干净的。