我在回购的第一次提交中对一些凭证进行了硬核,这是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摆脱第一次提交?
注意:我可以打开.git repo文件夹,但是作为练习,某些人的提交可能比2个多,并且想要从存储库中删除第一个或前5个提交。摆脱硬编码的信用等。
答案 0 :(得分:2)
我会压扁前两次提交(合并为一个提交)
git rebase -i --root
通过pick
或s
更改第二行的squash
,保存文件
结果是一次提交,导致当前第二次提交的状态。我假设您已经在第二次提交中删除了凭据。
如果您已经推送到远程,则必须使用git push --force
强制推送。
来自https://git-scm.com/docs/git-rebase:
-root
重新设置所有可从中到达的提交,而不是使用来限制它们。这使您可以在分支上重新建立根提交。与--onto一起使用时,它将跳过(而非中)已经包含的更改,而没有--onto时,它将对每个更改进行操作。与--onto和--preserve-merges一起使用时,所有根提交都将被重写为具有父级提交。
-i --interactive
列出即将重新提交的提交列表。让用户在重新设置基准之前编辑该列表。此模式还可以用于拆分提交(请参见下面的“拆分提交”)。
可以通过设置配置选项rebase.instructionFormat来更改提交列表格式。自定义的指令格式将自动在格式之前添加长提交哈希。