【问题标题】:Remove first commit in repo删除 repo 中的第一个提交
【发布时间】:2019-09-25 13:09:09
【问题描述】:

我在 repo 的第一次提交中硬编码了一些凭据,这里是 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 reset 还是 git rebase...有没有办法以某种方式摆脱第一次提交?

注意:我可以炸毁 .git 存储库文件夹,但作为练习,有些人可能有比 2 更多的提交,并希望从存储库中删除第一个或前 5 个提交摆脱硬编码的信用等。

【问题讨论】:

标签: git git-rebase


【解决方案1】:

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

git rebase -i --root

将第二行的pick改成ssquash,保存文件

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

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

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

--根

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

-i --交互式

列出即将被重新设置的提交。让用户在变基之前编辑该列表。此模式也可用于拆分提交(请参阅下面的拆分提交)。

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

【讨论】:

  • 谢谢你能链接到--root 选项说明吗?
猜你喜欢
  • 2015-03-02
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 2013-10-16
  • 2023-01-22
  • 1970-01-01
  • 2018-04-04
  • 2023-03-21
相关资源
最近更新 更多