Advanced Git Techniques

Today

1. Interactive Rebase for Clean History

Use git rebase -i to squash, reorder, or edit commits before pushing.

# Rebase the last 3 commits interactively
git rebase -i HEAD~3

In the editor:

Tip: Rebase only local commits. Never rebase commits that are already pushed to a shared branch.

2. Git Hooks for Automation

Git hooks run scripts at specific points in the workflow.

# Pre-commit hook (runs before every commit)
#!/bin/sh
git diff --cached --name-only | grep '\.py$' | xargs pylint

Place the script in .git/hooks/pre-commit. Make it executable with chmod +x .git/hooks/pre-commit.

Best Practice: Keep hooks simple and repository‑agnostic. Use a package manager (e.g., pre-commit) to standardize across developers.

3. Advanced Branching Strategies

Use git merge --no-ff for a merge commit that preserves branch boundaries.

git merge --no-ff feature/awesome-feature -m "Add awesome feature"

Tip: Tag release branches with git tag -a v1.2 -m "Release 1.2" for easy rollbacks.

4. Bisecting Bugs Quickly

git bisect automates binary search between a bad and a good commit.

git bisect start
git bisect bad   # current commit
git bisect good v1.1.0
# Git checks out a commit; test it
# Mark as good/bad
git bisect good
git bisect bad
# Repeat until the culprit is found
git bisect reset

Key Tip: Automate tests inside git bisect run "./test.sh" to speed up the process.

5. Submodule Management

Add a submodule for shared libraries.

git submodule add https://github.com/owner/lib.git libs/lib
git submodule update --init --recursive

Keep submodule URLs in .gitmodules and commit the state (SHA) to ensure reproducibility.

6. Quick‑Access Tips


Takeaway: Mastering these advanced Git techniques lets you maintain a clean history, automate quality checks, and debug efficiently. Apply them in your workflow to boost collaboration and reliability.