takecaretakecaretakecare Asked:2020-11-04 19:12:40 +0000 UTC2020-11-04 19:12:40 +0000 UTC 2020-11-04 19:12:40 +0000 UTC 删除不必要的提交 772 有这样一个提交列表。 提交 5 提交 4 提交 3 提交 2 提交 1 我想删除提交 5、3 和 2。也就是说,不仅要删除它们在分支中的可见性,还要永久删除它们。是否可以在保持提交 4 的同时做到这一点? git 2 个回答 Voted Best Answer KoVadim 2020-11-04T19:59:35Z2020-11-04T19:59:35Z 对于这种操作,您需要一个交互式 rebase。简而言之,那么 你需要先运行它 git rebase -i HEAD~6 您可以在提交 1 之前获取任何提交的哈希值,而不是 HEAD~6(六次提交)。 Vim 或其他编辑器将打开。会有一个提交列表。现在我们删除不必要的提交(只需删除行)。如果是 vim,那么只需在您想要的行(即您要删除的行)上按 d 两次。 然后我们退出编辑器(如果它是 vim - Esc :wq)。 之后,git 将回滚这些提交并再次滚动它们。在此过程中,可能需要解决冲突。 请记住,旧的提交实际上不会去任何地方,只会创建新的提交。 如果这些提交已经被推送到远程服务器,那么最好不要这样做。但是,如果只有您在从事该项目,则无需担心。但是必须强制推动(-f)。 vp_arth 2020-11-08T15:18:07Z2020-11-08T15:18:07Z 如果您需要从历史中间保存一个提交,则更容易进行挑选: git co -b branch_name commit1 git cherry-pick commit4 // где commitN - hash набора изменений требуемого коммита // Так можно последовательно отбирать интересующие вас изменения 之后,您将拥有一个branch_name类似的分支(коммит1) - (коммит 4)
对于这种操作,您需要一个交互式 rebase。简而言之,那么
你需要先运行它
您可以在提交 1 之前获取任何提交的哈希值,而不是 HEAD~6(六次提交)。 Vim 或其他编辑器将打开。会有一个提交列表。现在我们删除不必要的提交(只需删除行)。如果是 vim,那么只需在您想要的行(即您要删除的行)上按 d 两次。
然后我们退出编辑器(如果它是 vim - Esc :wq)。
之后,git 将回滚这些提交并再次滚动它们。在此过程中,可能需要解决冲突。
请记住,旧的提交实际上不会去任何地方,只会创建新的提交。
如果这些提交已经被推送到远程服务器,那么最好不要这样做。但是,如果只有您在从事该项目,则无需担心。但是必须强制推动(
-f)。如果您需要从历史中间保存一个提交,则更容易进行挑选:
之后,您将拥有一个
branch_name类似的分支(коммит1) - (коммит 4)