当我尝试压制时,为什么我会"丢失"Git提交?

Hoa*_*Hoa 1 git rebase squash

我的git log命令产生以下内容:

commit 568a9783f75b0c1ab12499beb32b518e19ab60c0 (HEAD -> master, origin/master)
Merge: 7428e09 e7c1537
...

commit 7428e0947bb47a3fdc46a1ea053bd86aa87934c8
...

commit e7c15371f39f4183c5f8c0645051a022851902f2
Merge: e715e8a ae7d067
...

commit ae7d06745891c215cc2980df520656509e4e36ef
...
Run Code Online (Sandbox Code Playgroud)

在提交7428e0947bb47a3fdc46a1ea053bd86aa87934c8(上面第二个)时,一些敏感信息被意外地检入存储库,因此我想用之前的提交来压缩它.

我想按照这里的说明操作:

如何在推送后压缩git中的提交?

首先,我删除了敏感信息,然后提交了更改:

git add .
git commit -a -m "Remove sensitive info"
Run Code Online (Sandbox Code Playgroud)

Git日志现在看起来像:

commit d6d1954c10bd71cc33f24222d1e36b3116eb7775 (HEAD -> master)
...

    Remove sensitive info

commit 568a9783f75b0c1ab12499beb32b518e19ab60c0 (origin/master)
Merge: 7428e09 e7c1537

commit 7428e0947bb47a3fdc46a1ea053bd86aa87934c8

commit e7c15371f39f4183c5f8c0645051a022851902f2
Merge: e715e8a ae7d067
...

commit ae7d06745891c215cc2980df520656509e4e36ef
...
Run Code Online (Sandbox Code Playgroud)

现在我跑:

git rebase -i origin/master~4 master
Run Code Online (Sandbox Code Playgroud)

我得到:

...
pick ae7d067 ...
pick d6d1954 Remove sensitive info
Run Code Online (Sandbox Code Playgroud)

我不明白发生了什么:

568a9783f75b0c1ab12499beb32b518e19ab60c0
7428e0947bb47a3fdc46a1ea053bd86aa87934c8
e7c15371f39f4183c5f8c0645051a022851902f2
Run Code Online (Sandbox Code Playgroud)

如何才能显示上述三个提交,以便我可以手动选择要压缩的提交?

Elp*_*Kay 6

它们是合并提交.为了保护它们,你需要-p--preserve-mergesgit rebase.

git rebase -i -p origin/master~4 master
Run Code Online (Sandbox Code Playgroud)

参考:https://www.git-scm.com/docs/git-rebase#git-rebase--p