Git - 从历史记录中删除提交
Git - Remove commit from history
我做了一件非常愚蠢的事情。我在我的代码中输入了一个诅咒词,并将代码推送到 master 分支上。在那之后我又推了几次所以人们不会拉坏东西,但我仍然可以在提交历史中找到诅咒词。
有没有办法从历史记录中删除提交?编辑:我不想将该文件添加到 gitignore,因为我们需要该文件。
谢谢
一旦你推送到 repo,你真的不想去改变历史。但是,如果您绝对确定自您违规提交以来没有人从回购中获得 pulled/fetched,那么您有 2 个选择。
如果你想完全删除“坏”提交(以及之后的每个提交),做一个git reset --hard ABC
(假设ABC
是“坏”提交的长辈的散列sibling——你想看到的那个分支的新头提交)。然后做一个git push --force
(或git push -f
)。
如果您只想编辑该提交并保留其后的提交,请执行 git rebase -i ABC~
。这将启动您的编辑器,显示您的提交列表,从违规的开始。将标志从“pick”更改为“e”,保存文件并关闭编辑器。然后对文件进行必要的更改,然后执行 git commit -a --amend
,然后执行 git rebase --continue
。用 git push -f
.
跟进
我想重复一遍,这些选项仅在 没有人 完成包含您的违规提交的拉取或提取时才可用。如果他们有,执行这些步骤只会让事情变得更糟。
如果它只在您的本地 PC 上(或者没有人检查您的更改):
- 使用:
git log
找到您要删除的提交。复制哈希(长序列如:e8348ebe553102018c ...)。
- 使用:
git rebase -i [hash]~
: for example
git rebase -i e8348~
只需删除不需要的提交并保存文件。
交互式 git rebase 还可以让您修复损坏的提交 - 无需删除它。
如果您将更改推送到服务器或其他人已经获得了您的更改 - 永远不要更改历史记录 - 这会给您的团队带来严重的问题。
这对我有用:
git log
找到您要删除的提交并复制其哈希值
git rebase -i <commit_hash>~
打开文本编辑器
- 在文本编辑器中,为您的特定提交从
pick
切换到 drop
我最近和一个团队一起工作,发现 git 有解决这个问题的方法
一切就此link
正在使用 git-filter-repo
和 BFG Repo-Cleaner
这是一个很酷的视频
我做了一件非常愚蠢的事情。我在我的代码中输入了一个诅咒词,并将代码推送到 master 分支上。在那之后我又推了几次所以人们不会拉坏东西,但我仍然可以在提交历史中找到诅咒词。
有没有办法从历史记录中删除提交?编辑:我不想将该文件添加到 gitignore,因为我们需要该文件。
谢谢
一旦你推送到 repo,你真的不想去改变历史。但是,如果您绝对确定自您违规提交以来没有人从回购中获得 pulled/fetched,那么您有 2 个选择。
如果你想完全删除“坏”提交(以及之后的每个提交),做一个git reset --hard ABC
(假设ABC
是“坏”提交的长辈的散列sibling——你想看到的那个分支的新头提交)。然后做一个git push --force
(或git push -f
)。
如果您只想编辑该提交并保留其后的提交,请执行 git rebase -i ABC~
。这将启动您的编辑器,显示您的提交列表,从违规的开始。将标志从“pick”更改为“e”,保存文件并关闭编辑器。然后对文件进行必要的更改,然后执行 git commit -a --amend
,然后执行 git rebase --continue
。用 git push -f
.
我想重复一遍,这些选项仅在 没有人 完成包含您的违规提交的拉取或提取时才可用。如果他们有,执行这些步骤只会让事情变得更糟。
如果它只在您的本地 PC 上(或者没有人检查您的更改):
- 使用:
git log
找到您要删除的提交。复制哈希(长序列如:e8348ebe553102018c ...)。
- 使用:
git rebase -i [hash]~ : for example git rebase -i e8348~
只需删除不需要的提交并保存文件。
交互式 git rebase 还可以让您修复损坏的提交 - 无需删除它。
如果您将更改推送到服务器或其他人已经获得了您的更改 - 永远不要更改历史记录 - 这会给您的团队带来严重的问题。
这对我有用:
git log
找到您要删除的提交并复制其哈希值git rebase -i <commit_hash>~
打开文本编辑器- 在文本编辑器中,为您的特定提交从
pick
切换到drop
我最近和一个团队一起工作,发现 git 有解决这个问题的方法
一切就此link
正在使用 git-filter-repo
和 BFG Repo-Cleaner
这是一个很酷的视频