Bird
Raised Fist0
Gitdevops~5 mins

Garbage collection with git gc - Commands & Configuration

Choose your learning style10 modes available
Introduction
Git stores many objects as you work, like commits and files. Over time, some objects become unused and take up space. The git gc command cleans up these unused objects to keep your repository fast and small.
When your repository feels slow or large after many commits and branches.
When you want to free up disk space used by old, unneeded data in your git repository.
After deleting branches or rewriting history to remove old commits.
Before making a backup to reduce the size of the repository.
When git suggests running garbage collection to optimize performance.
Commands
This command runs garbage collection to clean up unnecessary files and optimize the local repository.
Terminal
git gc
Expected OutputExpected
Enumerating objects: 50, done. Counting objects: 100% (50/50), done. Delta compression using up to 8 threads Compressing objects: 100% (30/30), done. Writing objects: 100% (50/50), done. Total 50 (delta 20), reused 0 (delta 0) Removing duplicate objects
Runs a more thorough garbage collection that takes longer but can save more space by compressing objects better.
Terminal
git gc --aggressive
Expected OutputExpected
Enumerating objects: 50, done. Counting objects: 100% (50/50), done. Delta compression using up to 8 threads Compressing objects: 100% (30/30), done. Writing objects: 100% (50/50), done. Total 50 (delta 20), reused 0 (delta 0) Removing duplicate objects
→
--aggressive - Makes garbage collection more thorough and compresses objects better
Removes all unreachable objects immediately instead of waiting for the default grace period.
Terminal
git gc --prune=now
Expected OutputExpected
Enumerating objects: 50, done. Counting objects: 100% (50/50), done. Delta compression using up to 8 threads Compressing objects: 100% (30/30), done. Writing objects: 100% (50/50), done. Total 50 (delta 20), reused 0 (delta 0) Pruning all unreachable objects now
→
--prune=now - Deletes unreachable objects immediately
Key Concept

If you remember nothing else from this pattern, remember: git gc cleans up unused data to keep your repository fast and small.

Common Mistakes
Running git gc too often or on very large repositories without understanding the time it takes.
Aggressive garbage collection can take a long time and slow down your work if run unnecessarily.
Run git gc only when needed, or use it during off-hours for large repositories.
Using git gc --prune=now without knowing it deletes unreachable objects immediately.
This can remove objects you might still want to recover if you made a mistake recently.
Use --prune=now only when you are sure you no longer need unreachable objects.
Summary
git gc cleans up unnecessary files and optimizes your git repository.
Use git gc --aggressive for a deeper cleanup that takes more time.
Use git gc --prune=now to immediately remove unreachable objects.

Practice

(1/5)
1. What is the main purpose of the git gc command?
easy
A. To create a new branch in the repository
B. To clean up unnecessary files and optimize the repository
C. To clone a remote repository locally
D. To merge two branches together

Solution

  1. Step 1: Understand the function of git gc

    The git gc command stands for garbage collection and is used to clean up unnecessary files in a Git repository.
  2. Step 2: Identify the main effect of running git gc

    Running git gc reduces repository size and improves performance by removing unneeded files.
  3. Final Answer:

    To clean up unnecessary files and optimize the repository -> Option B
  4. Quick Check:

    Garbage collection = Clean up files [OK]
Hint: Remember: gc means garbage collection, cleans repo files [OK]
Common Mistakes:
  • Confusing git gc with branch creation
  • Thinking it clones repositories
  • Assuming it merges branches
2. Which of the following is the correct syntax to run an aggressive garbage collection in Git?
easy
A. git gc --aggressive
B. git gc --fast
C. git gc -a
D. git gc --deep-clean

Solution

  1. Step 1: Recall the option for deeper cleanup

    The --aggressive option tells Git to perform a more thorough garbage collection.
  2. Step 2: Match the correct syntax

    The correct command is git gc --aggressive. Other options like --fast or --deep-clean do not exist.
  3. Final Answer:

    git gc --aggressive -> Option A
  4. Quick Check:

    Deeper cleanup = --aggressive [OK]
Hint: Use --aggressive for deep cleanup, not --fast [OK]
Common Mistakes:
  • Using non-existent flags like --deep-clean
  • Confusing -a with --aggressive
  • Assuming --fast does deep cleanup
3. What will be the effect of running git gc on a repository with many unreachable objects?
medium
A. It will reset the repository to the last commit
B. It will create new unreachable objects
C. It will delete unreachable objects and compress repository data
D. It will only update branch pointers

Solution

  1. Step 1: Understand unreachable objects in Git

    Unreachable objects are files or commits not referenced by any branch or tag and can be safely removed.
  2. Step 2: Effect of git gc on unreachable objects

    Running git gc deletes these unreachable objects and compresses data to optimize the repository.
  3. Final Answer:

    It will delete unreachable objects and compress repository data -> Option C
  4. Quick Check:

    Garbage collection removes unreachable objects [OK]
Hint: Garbage collection removes unneeded data safely [OK]
Common Mistakes:
  • Thinking it creates unreachable objects
  • Confusing it with reset commands
  • Assuming it only updates pointers
4. You ran git gc --aggressive but noticed the repository size did not reduce much. What could be a possible reason?
medium
A. Git does not support aggressive garbage collection
B. The command syntax was incorrect
C. The repository is corrupted
D. There are many recent commits and few unreachable objects

Solution

  1. Step 1: Understand when garbage collection reduces size

    Garbage collection mainly removes unreachable objects and compresses data. If most data is reachable, size won't reduce much.
  2. Step 2: Analyze the scenario

    If the repository has many recent commits and few unreachable objects, git gc --aggressive will have little effect on size.
  3. Final Answer:

    There are many recent commits and few unreachable objects -> Option D
  4. Quick Check:

    Few unreachable objects = little size change [OK]
Hint: Aggressive gc helps only if unreachable objects exist [OK]
Common Mistakes:
  • Assuming syntax error without checking
  • Believing aggressive gc is unsupported
  • Jumping to repository corruption conclusion
5. You want to reduce your Git repository size significantly and improve performance. Which sequence of commands should you run?
hard
A. git gc --aggressive; git prune; git gc
B. git gc; git gc --aggressive; git prune
C. git prune; git gc --aggressive; git gc
D. git fetch; git gc --aggressive; git prune

Solution

  1. Step 1: Understand the role of each command

    git gc --aggressive performs deep cleanup, git prune removes unreachable objects, and running git gc again optimizes after pruning.
  2. Step 2: Determine the best order

    First run git gc --aggressive for deep cleanup, then git prune to remove unreachable objects, and finally git gc to optimize the repository fully.
  3. Final Answer:

    git gc --aggressive; git prune; git gc -> Option A
  4. Quick Check:

    Deep cleanup + prune + optimize = D [OK]
Hint: Run aggressive gc, then prune, then gc again for best cleanup [OK]
Common Mistakes:
  • Running prune before aggressive gc
  • Skipping final gc optimization
  • Confusing fetch with garbage collection
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard