git/list[1] front-page[2] threads[3] people[4] search[5] about
 

How do I get rid of unneeded objects?

From
SKSteve Keller <keller.steve@gmx.de>
Date
Jan 18, 2019, 13:39 UTC
Message-ID
<trinity-02f2f7de-850d-4ad6-b709-86b7914cd81f-1547818792471@3c-app-gmx-bs22>

After deleting a branch or amending a commit I still have orphaned objects in the repository:

    $ mkdir repo; cd repo
    $ git init
    $ date > foo; git add foo; git commit -mmsg1                                        
    $ date > foo; git add foo; git commit -mmsg2                                        
    $ git checkout -b branch-1 HEAD^
    Switched to a new branch 'branch-1'
    $ git commit --allow-empty -mbranch-1
    [branch-1 84cfad2] branch-1
    $ git log --oneline
    84cfad2 branch-1
    09fdcb1 msg1
    $ find .git/objects/ -type f | sort | nl
    1  .git/objects/09/fdcb1cb7d5642874bd642ce5685ac0bebd116c
    2  .git/objects/41/d9ceb271c5e72f8a94a38dc4852ab501566bd1
    3  .git/objects/4f/c6596065dd08ebc62ce0728e2407d58dbde7e1
    4  .git/objects/5f/c4d7af12460d774be720f8761da0be2595404d
    5  .git/objects/84/cfad2cea2ae3f7a67530d5c596853f656e68d9
    6  .git/objects/a1/5faea60776cd537c4ef527f08caff48ff6c86b
    7  .git/objects/c8/c0278da7cf96d86c5881f3884b5015deee7113

These objects are 2 files, 2 trees, and 3 commits. If now delete the branch again, I'd like to have the unneeded commit deleted, but:

    $ git checkout master
    Switched to branch 'master'
    $ git branch -D branch-1
    Deleted branch branch-1 (was 84cfad2).
    $ git reflog expire --all
    $ git prune
    $ find .git/objects/ -type f | sort | nl
    1  .git/objects/09/fdcb1cb7d5642874bd642ce5685ac0bebd116c
    2  .git/objects/41/d9ceb271c5e72f8a94a38dc4852ab501566bd1
    3  .git/objects/4f/c6596065dd08ebc62ce0728e2407d58dbde7e1
    4  .git/objects/5f/c4d7af12460d774be720f8761da0be2595404d
    5  .git/objects/84/cfad2cea2ae3f7a67530d5c596853f656e68d9   <-- [1]
    6  .git/objects/a1/5faea60776cd537c4ef527f08caff48ff6c86b
    7  .git/objects/c8/c0278da7cf96d86c5881f3884b5015deee7113

Why is [1] not deleted? It seems reflog still knows about the deleted branch, and probably this is the reason git keeps the referenced commit:

    $ git reflog
    c8c0278 HEAD@{0}: checkout: moving from branch-1 to master
    84cfad2 HEAD@{1}: commit: branch-1
    09fdcb1 HEAD@{2}: checkout: moving from master to branch-1
    c8c0278 HEAD@{3}: commit: msg2
    09fdcb1 HEAD@{4}: commit (initial): msg1

Also, git gc, mentioned in the man page for git-reflog does not help. And I see similar things when amending a commit, where the old commit object is kept. How can one get rid of this?

Steve
Next: Eric Wong
Message 1 of 3 in “How do I get rid of unneeded objects?”
  1. Steve KellerJan 18, 2019
  2. Eric WongJan 18, 2019
  3. Kevin DaudtJan 19, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.