【问题标题】:Why do I have 'missing' Git commits when I try to squash?当我尝试 squash 时,为什么我有“丢失”的 Git 提交?
【发布时间】:2018-11-30 06:20:06
【问题描述】:

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

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

commit 7428e0947bb47a3fdc46a1ea053bd86aa87934c8
...

commit e7c15371f39f4183c5f8c0645051a022851902f2
Merge: e715e8a ae7d067
...

commit ae7d06745891c215cc2980df520656509e4e36ef
...

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

我正在尝试按照此处的说明进行操作:

How to squash commits in git after they have been pushed?

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

git add .
git commit -a -m "Remove sensitive info"

Git 日志现在看起来像:

commit d6d1954c10bd71cc33f24222d1e36b3116eb7775 (HEAD -> master)
...

    Remove sensitive info

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

commit 7428e0947bb47a3fdc46a1ea053bd86aa87934c8

commit e7c15371f39f4183c5f8c0645051a022851902f2
Merge: e715e8a ae7d067
...

commit ae7d06745891c215cc2980df520656509e4e36ef
...

现在我运行:

git rebase -i origin/master~4 master

我得到:

...
pick ae7d067 ...
pick d6d1954 Remove sensitive info

我不明白发生了什么:

568a9783f75b0c1ab12499beb32b518e19ab60c0
7428e0947bb47a3fdc46a1ea053bd86aa87934c8
e7c15371f39f4183c5f8c0645051a022851902f2

如何让上述三个提交出现,以便我可以手动选择要压缩的提交?

【问题讨论】:

  • "squash" 表示将两个提交合并为一个提交。如果您将包含敏感信息的提交与之前的提交一起压缩,您将获得仍然包含敏感信息的新提交。我不认为这真的是你想要的。您应该跳过或编辑包含敏感信息的提交,以便从提交历史记录中删除该信息。
  • 同意 - 我想删除敏感信息,然后用它之前的提交(包含敏感信息)压缩该提交

标签: git rebase squash


【解决方案1】:

它们是合并提交。要保存它们,您需要在git rebase 中使用-p--preserve-merges

git rebase -i -p origin/master~4 master

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

【讨论】:

  • 我不想保留敏感信息 - 我想删除它。
  • @Hoa “保留”是指如果您运行 git rebase -i -p origin/master~4 master,它们将出现在交互式变基菜单中,然后您可以选择保留或删除它们。
猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多