10

使用 TortoiseGit(我试图避免使用命令行)如何删除从某个提交中附加的所有提交,并“回到过去”(示例用法:继续做某事,认为我不喜欢它的位置正在走,并决定“返回”,不考虑中间的一切)。

简而言之,我希望“返回”5 次提交,然后删除它们。

4

3 回答 3

28

转到 TortoiseGit -> 显示日志。选择您要保留的最新提交,上面的所有内容都将被删除。然后右键单击它并选择“将“主”重置为此“并选择硬。不过要小心,因为一旦你这样做了,所有的提交都将永远丢失,除非它们被存储在某个地方的另一个分支中。

于 2011-12-09T15:42:10.203 回答
2

我从来没有使用过 Tortoise 任何东西(除非你算上电子组),但我会给你这个信息,以防你找不到使用 GUI 的方法,或者你最终决定使用 CLI。

正如@Tuxified 提到的,您可以使用git reset --hard <COMMIT>. 您需要指定一个提交,这可以通过任何一种令人生畏的可能方式来完成;最常见的形式有HEAD~4,它指定在当前分支的头部之前的 4 个提交,以及deadbeef42,它指定一个 SHA1 以 0xdeadbeef42 开头的提交。如果您运行的是 linux 或 OSX,您可以通过man git-rev-parse“SPECIFYING REVISIONS”下的 获取有关提交说明符的完整详细信息。

您还可以重命名当前分支 ( git branch -m new_branch_name),然后创建一个新分支,其头部位于您要恢复到的位置。优点是,如果您最终想要使用您在那里所做的全部或部分内容,您仍然可以轻松访问它;如果你在提交上打错了字,你就可以从一个巨大的糟糕时刻中解脱出来。另外 git 分支是超级轻量级​​的,所以唯一真正的缺点是会列出另一个分支。要创建您将使用的新主分支git branch master <COMMIT>,然后检查它。所以这里的实际效果与第一个选项相同,只是您仍然将旧更改保存在分支中new_branch_namemaster如果您愿意,您甚至可以在以后重新提交这些更改后合并这些更改。

请注意,这些技术中的任何一种都被视为“重写历史”,如果您与他人共享您的存储库,则会导致问题。如果您很聪明并推送到云城或另一台 PC 中的备份存储库,那么您必须先修复这方面的问题,然后才能再次推送。

这可能比你现在需要的信息多得多,但如果你最终经常使用 git,你可能会想在某个时候学习这些东西。对不起,我不知道如何使用乌龟......

于 2010-03-28T00:59:59.327 回答
0

从命令行,您可以使用 revert 或 reset 命令。TortoiseGit应该有类似的命令,也许您可​​以通过查看提交日志来访问它们?

(我没用过TortoiseGit所以不能查)

于 2010-03-28T00:22:13.073 回答