使用 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
|
现在,我想:
- 删除提交 D、C 和 B
- 将 origin/master 移至提交 E
- 删除 origin/test 分支标签
但我在 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.: 唯一的问题是你会看到分支上的还原提交但代码将是干净的。
我是 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
|
现在,我想:
- 删除提交 D、C 和 B
- 将 origin/master 移至提交 E
- 删除 origin/test 分支标签
但我在 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.: 唯一的问题是你会看到分支上的还原提交但代码将是干净的。