删除存储库中的首次提交

时间:2019-05-07 20:17:54

标签: git git-rebase

我在回购的第一次提交中对一些凭证进行了硬核,这是git log的输出:

commit 7958f03d51b0c3852bffc43bd169a121314dafca (HEAD -> master)
Author: Alexander Mills <alex@alexs-mac.local>
Date:   Tue May 7 13:14:45 2019 -0700

    modify dockerfile

commit d16acc2b2331e5afdc51d87d05b3aeb01397d4ef (origin/master)
Author: Alexander Mills <alex@alexs-mac.local>
Date:   Thu May 2 11:48:14 2019 -0700

    init

如何删除第一次提交(“ init”)?

我尝试过:

git reset --soft HEAD~1

但是那只会让我重置为第一次提交。如果我尝试git rebase -i HEAD~1,我会得到:

pick 7958f03 modify dockerfile

# Rebase d16acc2..7958f03 onto d16acc2 (1 command)
#  ...

因此,没有明显的方法可以用git resetgit rebase删除第一次提交...是否有办法以某种方式git摆脱第一次提交?

注意:我可以打开.git repo文件夹,但是作为练习,某些人的提交可能比2个多,并且想要从存储库中删除第一个或前5个提交。摆脱硬编码的信用等。

1 个答案:

答案 0 :(得分:2)

我会压扁前两次提交(合并为一个提交)

git rebase -i --root

通过picks更改第二行的squash,保存文件

结果是一次提交,导致当前第二次提交的状态。我假设您已经在第二次提交中删除了凭据。

如果您已经推送到远程,则必须使用git push --force 强制推送

来自https://git-scm.com/docs/git-rebase

-root

  

重新设置所有可从中到达的提交,而不是使用来限制它们。这使您可以在分支上重新建立根提交。与--onto一起使用时,它将跳过(而非中)已经包含的更改,而没有--onto时,它将对每个更改进行操作。与--onto和--preserve-merges一起使用时,所有根提交都将被重写为具有父级提交。

-i --interactive

  

列出即将重新提交的提交列表。让用户在重新设置基准之前编辑该列表。此模式还可以用于拆分提交(请参见下面的“拆分提交”)。

     

可以通过设置配置选项rebase.instructionFormat来更改提交列表格式。自定义的指令格式将自动在格式之前添加长提交哈希。