Remove commit for good

2019-02-15 12:13发布

I know there are thousands of threads for this question.

But I found out something really weird.

If you create a project on GitHub, do some commits.
Let's say commit 1, 2, 3, 4, 5.
Later, you realize you want to change something into commit 3.

As you were working in your own branch, no problem to rewrite history.

So let's do this: (based on this stackoverflow answer)

git rebase --interactive 'bbc643cd^'

// Modify 'pick' to 'edit' into interactive prompt and :
git commit --all --amend --no-edit
git rebase --continue
git push -f

Great! The mistake is corrected. The history has been rewritten, so the commit bbc643cd is now lkqjfhchc.
You can check the source on your GitHub and everything will have been updated.

But someone can still find it on GitHub!

Access the URL: https://github.com/your-nickname/your-project/commit/bbc643cd... (full commit hash) and you will find it!

How could we remove this commit for good?

Thanks for any help!

2条回答
\"骚年 ilove
2楼-- · 2019-02-15 13:01

I contacted Github staff from here : https://github.com/contact

Here's the answer (I couldn't do anything about it, no prune, no gc, etc)

Hey Maxime,

The commit was available because commits are not automatically deleted when they're removed from the history of a branch -- they're deleted when they're garbage collected. I just ran garbage collection for that repository manually and the commit should now return a 404.

Hope this helps.

Cheers, XXXXX

So you just have to wait or contact staff to force garbage collector in case you have the same problem !

查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-02-15 13:03

According to your additional comments :

You did everything as it should be.
The point is this: git never lose data unless you tell it to (whats known as gc - garbadge collector)

The files will remain there until they will gc will be called.

This is called dangling file

Dangling commit

A commit that isn't linked to any branch or tag either directly or by any of its ascendants.

You can see all the dangling references locally with this:

git fsck --full

enter image description here

The only way to get rid of it is to run gc

//
// !!!Caution:
// It will remove all your dangling files
git gc --aggressive --prune now

Here you can read some more about it.

查看更多
登录 后发表回答