Git
I love Git and version control. And I use version control over any project I do. I follow a series of rules when dealing with Git. Josh seems neat. Think Like Git is a great read.
git-branchless is neat.
Notes
- Commit as often as you can. Ideally after each micro-iteration, when something new is working.
- This way, at the end of the day you can just rebase the whole branch and squash all of the micro-commits in a whole commit implementing the whole new features.
- Good git workflow to make changes to new projects: clone, fork (
hub fork
), 'git checkout -b my-feature', work, commit, 'git push -u nikitavoloboev my-feature', work, commit, 'git push'. - If you’re doing things right, there’s only two kinds of branches anyways, master and feature branches. Feature branches can be squashed and rebased off master (minimizing the issue of merge conflicts and making for easier management of the commit history) and merged to master from there without requiring further conflict resolution. (Trunk-Based Development)
- A Git branch is just a pointer to a commit. Git commits, however, also contain the hash of the parent commit(s), so by referring to that commit you also refer too all ancestors.
- Squash + rebase (for feature branches) are good for PRs. No one cares that it took you 20 tries to get the feature right, what matters is what went into the pull request, which is usually one commit.
- To me the beauty of git stems from the fact that it is an implementation of a functional data structure. It‘s a tree index that is read-only, and updating it involves creating a complete copy of the tree and giving it a new name. Then the only challenge is to make that copy as cheap as possible - for which the tree lends itself, as only the nodes on the path to the root need to get updated. As a result, you get lock-free transactions (branches) and minimal overhead. It is so beautiful in fact that when I think about systems that need to maintain long-running state in concurrent environments, my first reaction is ”split up the state into files, and maintain it through git“.
- PRs with mandatory review within a company are a bit of an antipattern/red flag IMO. Cycle time automatically gets long. Even when pairing, changes can be put up for review if the authors want more feedback, so it's not a binary choice.
- Git commit message tip: Describe what the code does, not what you did to the code.
Code
# set new git remote origin (https://stackoverflow.com/questions/16330404/how-to-remove-remote-origin-from-a-git-repository)
git remote set-url origin git://new.url.here
# Cleanup .git http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
git repack -a -d --depth=250 --window=250
# Reset to previous commit
git reset HEAD~
# Reset to commit
git reset <commit hash> --hard
# Checkout previous commit
git checkout HEAD~
# Create new branch
git checkout -b
# Revert changes to modified files (working changes)
git reset --hard
# New branch without git history & files
git checkout --orphan
# Show where git configs get defined
git config --show-origin -l
# Undo last commit but don't throw away changes
git reset --soft HEAD^
# List all git submodules
git submodule--helper list
# Pull from PR
git pull origin pull/<issue ID>/head
# List remote branches
git branch -a
# Delete branch
git branch -d
# Delete remote branch
git push origin --delete
# Force overwrite git repo. https://stackoverflow.com/questions/10510462/force-git-push-to-overwrite-remote-files
git push -f <remote> <branch>
# Reset to specific commit
git reset --hard <commit>
# Remove dir from git
git rm --cached -r <dir>
# Rename previous commit
git commit --amend
# Force push overwrite
git push --force origin master
# Hard reset a branch
git reset --hard <branch-name>
# Change remote. i.e. when making a fork of a clone to change upstream destination.
git remote rename origin upstream; git remote rename nikitavoloboev origin
# Change upstream to my name so it pushes there
git branch --set-upstream-to nikitavoloboev/master master
# Show changes between commits. Where f5352 and be73 are unique commit hashes.
git diff f5352 be73
# Update submodule
git submodule update
# Set PGP key for Git globally. <key> = fingerprint w/o spaces
git config --global user.signingkey <key>
# Clone git repo without history (much faster)
git clone [REPO] --depth 1
# Move your unstaged changes to a new branch (https://twitter.com/wesbos/status/1479129404500594691)
git switch -c <branch-name>
# Remove sensitive info committed (https://github.com/tj/git-extras/blob/master/Commands.md#git-obliterate)
git obliterate <>
# Delete commit from remote.
# 1. Delete commit from local repo
git reset --hard HEAD~1
# 2. Delete commit from remote repo (can get commit using git log)
git push -f origin last_known_good_commit:branch_name
Change old commit message
#
# It is bad practice to rewrite history. Works best if no one has pushed commits on top of remote branch you want to rewrite history of.
# 1. Rebase to commit you want to change (~1 means the first ancestor of the specified commit)
git rebase -i <hash>~1
# Can also do this
git rebase -i HEAD~4 # where HEAD~4 = last 3 commits
# 2. Rename pick to reword (in opened editor) & save/quit
# 3. Change commit message in editor and save
# 4. Overwrite and remove duplicate commits
git push --force-with-lease
Quickly pull down PRs
git config --global --add alias.pr '!f() { git fetch -fu ${2:-upstream} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'
git config --global --add alias.pr-clean '!git checkout master ; git for-each-ref refs/heads/pr/* --format="%(refname)" | while read ref ; do branch=${ref#refs/heads/} ; git branch -D $branch ; done'
Links
- Git from the Bottom Up (2008) (HN)
- Flight rules for git
- Great Git workflow instructions
- GIT Conventions
- Learn Git branching (Code) (HN)
- Gitbase - SQL interface to Git repositories.
- Gitea - Easiest, fastest, and most painless way of setting up a self-hosted Git service. (Web) (HN)
- How to Write a Git Commit Message
- How I Use Git
- clog-cli - Generate beautiful changelogs from your Git commit history.
- git rebase for fame and power
- gitbatch - Manage your git repositories in one place.
- Conventional Commits - Specification for adding human and machine readable meaning to commit messages.
- glint - Friendly tool for creating commits in the Conventional Commit style.
- git absorb - Git commit --fixup, but automatic.
- ghq - Manage remote repository clones.
- gst - Toolbox that offers additional commands (list, new, rm, doctor, update, fetch) over ghq enabled environment.
- git-flow - Collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model.
- gitin - Commit/branch/status explorer for git.
- Lab - Wraps Git or Hub, making it simple to clone, fork, and interact with repositories on GitLab.
- Tips for a disciplined git workflow (2019) (Reddit)
- Git Town - Generic, high-level Git workflow support. (Docs)
- libgit2 - Portable, pure C implementation of the Git core methods provided as a re-entrant linkable library.
- git-delete-squashed - Delete branches that have been squashed and merged into master.
- rebase-editor - Simple terminal based sequence editor for git interactive rebase.
- git-standup - Recall what you did on the last working day. Psst! or be nosy and find what someone else in your team did.
- git-rs - Implementing git in rust for fun and education.
- Commit messages guide
- The Many Benefits of Using a Monorepo (2019) (HN)
- Lefthook - Fast and powerful Git hooks manager for any type of projects.
- git rebase in depth (HN)
- Highlights from Git 2.22 (2019)
- What is a fork, really, and how GitHub changed its meaning (2019) (Lobsters) (HN)
- More productive Git (HN)
- List of commonly used Git commands
- Hercules - Fast, insightful and highly customizable Git history analysis.
- Git Tower Guides
- git-stashout - Custom git checkout command to automatically manage a per-branch stash.
- git-bug - Distributed, offline-first bug tracker embedded in git.
- Git Standards (2018)
- BFG Repo-Cleaner - Removes large or troublesome blobs like git-filter-branch does, but faster.
- gitstatus - 10x faster implementation of
git status
command. - git-revise - Handy tool for doing efficient in-memory commit rebases & fixups. (Tweet)
- git-secret - Bash-tool to store your private data inside a git repository.
- pre-commit - Framework for managing and maintaining multi-language pre-commit hooks.
- git-o-matic - Tool to monitor git repositories and automatically pull & push changes.
- GitGraph.js - JavaScript library to draw pretty git graphs in the browser.
- Git First-Parent-- Have your messy history and eat it too (2018)
- Git Alias - Git alias commands for faster easier version control.
- Git Interactive Rebase Tool - Native cross platform full feature terminal based sequence editor for git interactive rebase. Written in Rust using ncurses.
- Apache Arrow Git Tips
- GitSheet - Dead simple git cheatsheet.
- Git Commit naming
- HN: My Favourite Git Commit (2019)
- Onefetch - Git repository summary on your terminal.
- Delta - Syntax-highlighting pager for git.
- Building Git - Deep dive into the internals of the Git version control system.
- gitrs - Re-implementation of the git version control system in Rust.
- sourcehut - Suite of open source tools for managing git projects. (sr.ht)
- Sourcehut's year in alpha (2019) (HN)
- Sourcehut Project Hub (HN) (Lobsters)
- SourceHut's second year in alpha (2020) (HN)
- Awesome Monorepo - Curated list of awesome Monorepo tools, software and architectures.
- rug - Stripped-down version of Git, implemented in Rust.
- Git from Beginner to Advanced
- GitUp - Git client with nice interface. (Code)
- Git from the inside out (HN)
- Stacked Diffs Versus Pull Requests (2018)
- Barebones git (2019) (Lobsters)
- git-of-theseus - Analyze how a Git repo grows over time.
- Git power tools for daily use (2018)
- git-toolbelt - Suite of useful Git commands that aid with scripting or every day command line usage.
- git-series - Track changes to a patch series over time.
- Moving a Git Repository into Its Submodule (2020)
- Ignoring bulk change commits with git blame (2019)
- git-sizer - Compute various size metrics for a Git repository, flagging those that might cause problems.
- Release It - Automate versioning and package publishing.
- Git Magic - Guide to using Git, a version control system. Fast, powerful, easy to learn.
- git-crypt - Transparent file encryption in git.
- Set up Keybase.io, GPG & Git to sign commits on GitHub
- Bliss - "batteries included" .gitignore management tool.
- Vaibhav Sagar - I Haskell a Git (2018)
- Git Command Explorer - Find the right commands you need without digging through the web. (Code) (HN)
- Please stop recommending Git Flow (2020) (HN) (Lobsters)
- git-trim - Automatically trims your tracking branches whose upstream branches are merged or gone.
- A successful Git branching model (2020)
- Belay - Makes it easy to run your CI checks locally, so you can git push with confidence.
- Little Things I Like to Do with Git (2017)
- gsync - rsync-like command to sync a git repo to a remote machine via git itself.
- go-git - Highly extensible Git implementation in pure Go.
- Databases that use git as a backend? (2020)
- Self-hosting a tiny git remote (2020)
- dgit - Git with decentralized remotes. (HN)
- Setting Up Git Identities (2020) (HN)
- Git Immersion - Guided tour that walks through the fundamentals of Git, inspired by the premise that to know a thing is to do it.
- Ship.js - Take control of what is going to be your next release.
- Git Under the Hood Internals, Techniques, and Rewriting History (2019)
- libgit2 - Cross-platform, linkable library implementation of Git that you can use in your application.
- lazygit - Simple terminal UI for git commands.
- My unorthodox, branchless git workflow (2020) (Lobsters) (HN)
- Git Cola - Sleek and powerful graphical user interface for Git. (Code)
- Ultra Runner - Ultra fast monorepo script runner and build tool.
- git-fame - Pretty-print git repository collaborators sorted by contributions.
- Collection of .gitignore templates
- CS Visualized: Useful Git Commands (2020)
- git-issue - Git-based decentralized issue management.
- git-filter-repo - Quickly rewrite git repository history (filter-branch replacement).
- The Communicative Value of Using Git Well (2020)
- go-gitdiff - Go library for parsing and applying patches created by Git.
- degit - Makes copies of git repositories.
- Git branch naming conventions (HN)
- Git Command Overview with Useful Flags and Aliases (2020)
- Question: How does git detect renames? (2020) (Lobsters)
- Git Koans (2013)
- Sublime Merge - Git Client, done Sublime. Line-by-line Staging. Commit Editing. Unmatched Performance. ([HN])
- GitUI - Blazing fast terminal-ui for git written in rust.
- gitea-release Tool Announcement (2020)
- git-fuzzy - CLI interface to git that relies heavily on fzf. (HN)
- DeGit - Decentralized Git projects hosting platform.
- How to write good Git commit messages (2020) (HN)
- gitignore.io - Create Useful .gitignore Files For Your Project. (Code)
- Speeding up a Git monorepo at Dropbox with <200 lines of code (2020) (HN)
- Oh Shit, Git!?! (HN)
- Using Rust to Delete Gitignored Cruft (2020)
- The Problem with Git Flow (2020) (HN)
- Ask HN: Git alternatives that aren't so complicated? (2020)
- Git Concepts I Wish I Knew Years Ago (2020)
- gitqlite - Query git repositories with SQL. Uses SQLite virtual tables and go-git.
- Git commit accepts several message flags (-m) to allow multiline commits (HN)
- A Better Way to Git Log to Understand Changes in a Big Codebase (2020)
- Write good commit messages (2020) (Lobsters)
- Josh - Just One Single History. Get the advantages of a monorepo with multirepo setups. (HN)
- gix - Idiomatic, modern, lean, fast, safe & pure rust implementation of git.
- git-delete-merged-branches - Convenient command-line tool helping you keep repositories clean. (HN)
- askgit - Command-line tool for running SQL queries on git repositories. Generate reports, perform status checks, analyze codebases. (Demo)
- Using Askgit – A SQL interface to your Git repository (2020) (HN)
- Trunk-based development (2020)
- Good Commit Messages (2020) (Lobsters)
- Ignoring mass reformatting commits with git blame
- cgit - Hyperfast web frontend for git repositories written in C.
- Fork and Pull Request Workflow
- Ugit - DIY Git in Python (HN)
- Stacked pull requests: Make code reviews faster, easier, and more effective
- Create a global gitignore (2020)
- Fortunately, I don't squash my commits (2020) (HN) (Reddit)
- Git QuickFix - Allows you to commit changes in your git repository to a new branch without leaving the current branch.
- Gerrit is Awesome (2016)
- Gerrit Code Review
- Dulwich - Pure-Python Git implementation. (Web)
- Ask HN: What are the pros / cons of using monorepos? (2020)
- bit - Modern Git CLI. (HN) (Interview With Chris Walz of bit)
- Copybara Action - Transform and move code between repositories. Start with ZERO config and 100% customizable.
- Git scraping: track changes over time by scraping to a Git repository (2020) (HN)
- Branch Agnostic Git Aliases (2020) (Lobsters)
- Beyond the Basics: 5 Powerful Advanced Tools in Git (2020)
- meta - Tool for managing multi-project systems and libraries. It answers the conundrum of choosing between a mono repo or many repos by saying "both", with a meta repo.
- Self-hosting Git with cgit (2020) (Lobsters)
- Embrace the monolith - Embrace a simpler way of building applications.
- Better Git diff output for Ruby, Python, Elixir, Go and more (2020)
- The Git Commit Hash (2020)
- git-secrets - Prevents you from committing secrets and credentials into git repositories.
- Narrated Diffs - Tool to enable PR authors to tell a story with their changes. (Code)
- gitjacker - Leak git repositories from misconfigured websites.
- Git Magic - Guide to using Git. (Code)
- Git Crash Course (2020)
- chglog - Changelog management library and tool.
- fzf powered git fixups (2017)
- Explain Git with D3 - Use D3 to visualize simple git branching operations. (Code) (HN)
- My Thoughts On Monorepo (2020) (HN)
- Signed git pushes (2020)
- Towards an automated changelog workflow (2020)
- commit-autosuggestions - Tool that AI automatically recommends commit messages.
- GOMP - Tool for comparing branches.
- This is how I git (2020) (Lobsters) (HN)
- Trello Android's Git Branching Strategy (2020)
- Why Git blame sucks for understanding WTF code (and what you should use instead) (2020) (Lobsters)
- Git is simply too hard (2020) (HN)
- gfold - CLI application that helps you keep track of multiple Git repositories.
- git-ignore - Interactive CLI to generate .gitignore files.
- isomorphic-git - Pure JavaScript implementation of git for node and browsers. (Web)
- git-machete - Makes merges/rebases/push/pulls hassle-free even when multiple branches are present in the repository.
- Smithy - Tiny git forge written in Go.
- Git Commands You Should Never Use (2020) (HN)
- Gitsight - Derive insights from open source repositories and their contributors.
- Gitopia - Decentralized Source Code Collaboration Platform.
- git wip: What the heck was I just doing? (2020) (Lobsters)
- GitLab - Open source end-to-end software development platform. (Code) (GitHub Mirror) (HN) (Tweet)
- mob - Tool for swift git handover. (Web) (Lobsters)
- uncommitted - Command-line tool to find projects whose changes have not been committed to version control.
- Organise your commits (2020)
- Experimenting with git storage (2020) (Lobsters)
- Fornalder - Visualize long-term trends in collections of Git repositories.
- What comes after Git? (2020) (HN)
- Some of git internals
- Git email flow vs Github flow (2020) (Lobsters)
- Git Commands to Live By (2020) (Reddit)
- git-chglog - CHANGELOG generator implemented in Go.
- GitRows - Makes it easy to use and store data in GitHub and GitLab repos. (Web)
- How to keep your Git history clean with interactive rebase (2020) (Lobsters)
- git-annex - Allows managing files with git, without checking the file contents into git. (Code)
- Git-Annex-Adapter - Call git-annex commands from Python.
- gittup - Entire(-ish) linux distribution in git.
- Git Extras - GIT utilities -- repo summary, repl, changelog population, author commit percentages and more.
- Gogs - Painless self-hosted Git service. (Web)
- git-big-picture - Visualization tool for Git repositories.
- Mango - Git, completely decentralised. Using Ethereum and P2P content addressable networks (Swarm, IPFS, SSB) as a backend to Git.
- git-url-parse - High level git url parser for common git providers.
- pre-commit-hooks - Some out-of-the-box hooks for pre-commit.
- Cheatsheet to Rewrite Git History (2021)
- Why SQLite Does Not Use Git (2018) (HN)
- A Visual Git Reference
- Commitizen - Create committing rules for projects. Auto bump versions. Auto changelog generation.
- simple-pre-commit - Simple pre commit hook for small open source projects.
- git2go - Go bindings for libgit2.
- Git Submodules: Adding, Using, Removing, Updating (HN)
- Advanced Git Features You Didn’t Know You Needed (2021) (Lobsters)
- Git Chain - Tool to rebase multiple Git branches based on the previous one.
- mit - Git wrapper with a streamlined UX.
- Git is my buddy: Effective Git as a solo developer (2021) (HN)
- git-gone - Cleanup stale Git branches of pull requests.
- Stacked Git - Application for managing Git commits as a stack of patches. (Web)
- git-notify - Communicate important updates to your team via git commit messages.
- diff2html - Generates pretty HTML diffs from git diff or unified diff output. (Web)
- Oh My Git! - Open source game about learning Git. (Code)
- Improving large monorepo performance on GitHub (2021) (HN)
- Self-Hosting Git (2020) (HN)
- Git scraping: tracking changes to a scraped data source using GitHub Actions (2021) (Tweet)
- Git Plan - Better workflow for git.
- Those pesky pull request reviews (2021) (Tweet)
- On Git Commit Messages
- Commits are snapshots not diffs (2020) (HN)
- A look how branches work in Git (2021) (HN)
- GitAhead - Graphical Git client for Windows, Linux and macOS. (Code)
- Gitlet.js - Git implemented in JavaScript. (Docs) (HN)
- git-split-diffs - GitHub style split diffs with syntax highlighting in your terminal.
- What’s wrong with Git? A conceptual design analysis (2016) (HN)
- Scaling monorepo maintenance (2021) (HN)
- Clean Git House (2021) - Guide about deleting branches in Git.
- repostatus.org - Standard to easily communicate to humans and machines the development/support and usability status of software repositories/projects. (Code)
- Undercover - Store your environment variables and secrets in git safely.
- gitgo - Provides Go functions for interacting with Git repositories.
- Convco - Conventional commits, changelog, versioning, validation.
- GitLive - Extend Git with real-time collaborative superpowers.
- A Random Walk Through Git
- When it comes to git history, less is more (2021) (Lobsters) (HN)
- Git undo: We can do better (2021) (HN)
- Collection of Useful .gitattributes Templates
- git-branchless - Branchless workflow for Git. Suite of tools to help you visualize, navigate, manipulate, and repair your commit history. (Lobsters)
- No Code Reviews by Default (2021) (HN)
- git-sync - Simple command that pulls a git repository into a local directory. Keeps it in sync with the upstream.
- git-peek - Open a remote git repository in your local text editor.
- Things I wish Git had: Commit groups (2021) (HN)
- git when-merged - Determine when a particular commit was merged into a git branch.
- A monorepo misconception – atomic cross-project commits (2021) (HN) (Lobsters)
- Awesome Git
- Cleaning Up Git History (2021) (Lobsters)
- Think Like (a) Git
- Different ways to solve git merge conflicts (2021)
- Cocogitto - Set of cli tool for the conventional commit and semver specifications.
- New in Git: switch and restore (2021) (HN) (Lobsters)
- git-cc - Git extension to help write conventional commits.
- Advanced Git In-Depth (Code)
- Is there any place for monoliths in 2021? (HN)
- Gitly - GitHub/GitLab alternative written in V. (Code)
- Monorepo vs. polyrepo
- From a Single Repo, to Multi-Repos, to Monorepo, to Multi-Monorepo (HN)
- Octopilot - Automate your Gitops workflow, by automatically creating/merging GitHub Pull Requests. (Web)
- Awesome git addons
- forgit - Utility tool powered by fzf for using git interactively. (HN)
- Picturing Git: Conceptions and Misconceptions (2021) (HN)
- gitty - CLI helper for git projects. Shows you all the relevant issues, pull requests and changes at a quick glance.
- git-cliff - Generate changelog files from the Git history. (HN) (Article)
- Track changes in Excel, Word, PowerPoint, PDFs, Images & Videos with Git (2021)
- Version Control Without Git (HN)
- HN: Gitlab S-1 (2021)
- Git Commands Explained with Cats (2017) (HN)
- Visual Git Cheat Sheet (HN)
- The elements of git (2021)
- What if Git worked with Programming Languages? (HN)
- Smimesign - S/MIME signing utility for use with Git.
- GitHint - Find an answer to your git question.
- Working With Multiple Git Configs (2021)
- Aho - Git implementation in AWK. (HN) (Lobsters)
- Improving Git's Autocorrect Feature (2021)
- git-stack - Stacked branch management for Git.
- Fast rebases with git-move (2021) (HN)
- go-gitdir - Simple and lightweight SSH git hosting with just a directory.
- Rudolfs - High-performance, caching Git LFS server with an AWS S3 and local storage back-end.
- git-subset - Super fast Git tree filtering.
- chronicle - Fast changelog generator that sources changes from GitHub PRs and issues, organized by labels.
- 16 Year History of the Git Init Command (2021)
- Git: ssh signing: Add commit & tag signing/verification via SSH keys using ssh-keygen (Lobsters) (Tweet)
- When to Use Each of the Git Diff Algorithms (2020)
- Low budget P2P content distribution with git (Lobsters)
- go-git-providers - general-purpose Go client for interacting with Git providers' APIs (GitHub, GitLab).
- Oaf - Git client that brings a more user-friendly CLI to Git.
- GitPython - Python library used to interact with Git repositories.
- GitFlow ToolKit - Simple toolkit for GitFlow.
- git-rewrite-author - Rewrite authors / commiters history of a git repository with ease.
- Git Articles - CSS-Tricks
- GoIgnore - gitignore wizard in your command line written in Go.
- Mani - CLI tool to help you manage multiple repositories. (Docs)
- Git techniques (2021) (HN)
- Make your monorepo feel small with Git’s sparse index (2021)
- Git as a source of truth for network automation (2021)
- Conventional Changelog - Generate changelogs and release notes from a project's commit messages and metadata.
- ChangeSets – group PRs across multiple Git repos (2021) (HN)
- Git ls-files is Faster Than Fd and Find (2021)
- Nano Staged - Tool to run commands only on git staged files.
- Git Plugins - Collection of custom git commands.
- git-mediate - Become a conflict resolution hero.
- Git for Professionals Tutorial (2021)
- git-history: a tool for analyzing scraped data collected using Git and SQLite (2021)
- Branchless Git (2021) (Lobsters)
- Soft Serve - Tasty, self-hosted Git server for the command line.
- git-chain - Tool for rebasing a chain of local git branches.
- qit - Overly opinionated git tooling.
- commitlog - Generate Changelogs from Commits (CLI).
- How I learned to stop worrying and push to master (HN)
- Git Rebase to Squash Commits to Most Recent Message (2021)
- vercel/git-hooks - No nonsense Git hook management.
- How to back up your Git repositories (2021) (Lobsters)
- Ask HN: Do we need an easier Git? (2022)
- git-agecrypt - Git integration usable to store encrypted secrets in the git repository while having the plaintext available in the working tree.
- Dura - Background process that watches your Git repositories. (HN) (Lobsters)
- git-smart-checkout - Git command extension for switching git branches more efficiently.
- Lopper - Deletes dead local Git branches.
- How to Squash and Rebase in Git (2021) (HN)
- autosaved - Go utility for autosaving progress in Git projects.
- Using Git Commit Message Templates to Write Better Commit Messages (HN)
- How I Use Stacked Git at $WORK
- multi-gitter - CLI to update multiple repositories in bulk.
- Git Organized: A Better Git Flow (2022)
- Highlights from Git 2.35 (2022) (HN)
- zig-git - Inspect into the depths of your .git folder purely from Zig.
- Gitless - Simple version control system built on top of Git. (Code) (Lobsters)
- A better
git blame
with--ignore-rev
(Lobsters) - Git in one image (HN)
- go-gitignore - Go package for parsing and matching paths against .gitignore files.
- Self-hosted Git Server with Built-in CI/CD
- GitGot - Semi-automated, feedback-driven tool to rapidly search through troves of public data on GitHub for sensitive secrets.
- Gitless - Easy-to-use interface to Git that is also easy to learn.
- commit-verify - Auto commit message format verify hook.
- VSDB - 'Git' in the form of KV-database.
- branch-cleaner - Cleanup old unused git branches.
- Git's Best And Most Unknown Feature (2021)
- ocaml-git - Pure OCaml Git format and protocol.
- all-repos - Clone all your repositories and apply sweeping changes.
- Goblet - Git proxy server that caches repositories for read access.
- napi-rs/simple-git - Simple and fast git helper functions.
- Distributed Code Review For Git - Command line tool for performing code reviews on git repositories.
- Git Remote S3 Helper - Push and pull git repos to/from an s3 bucket, encrypted using gpg.
- scmpuff - Numeric file shortcuts for common git commands.
- Ask HN: What is your Git commit/push flow?
- git-cl - Git Changelog.
- split-patch.py -
Git add -p
with multiple buckets. (HN) - diffr - Diff highlighting tool.
- Scriv - Changelog management tool.
- git-promise - Simple wrapper to run any git command and process it's output using promises.
- git-format-staged - Git command to transform staged files using a formatting command.
- Sloughi - Tiny crate to make it easy to share and apply Git hooks for Rust projects. Inspired by Husky.
- git-workspace - Sync personal and work git repositories from multiple providers.
- Comet - CLI tool that helps you to use conventional commits with git.
- dunk - Prettier git diffs.
- Git Module - Go module for Git access through shell commands.
- git-meta - Allows developers to work with extremely large codebases. Build your own monorepo using Git submodules.
- Git Leave - Check for unsaved or uncommitted changes on your machine.
- Use Git tactically (2022) (HN)
- Git Katas - Set of exercises for deliberate Git Practice.
- Git Mirror - Watch a GitLab or GitHub groups and keep it in sync with external git repositories.
- Git Credential - Rust library that provides types that help to implement git-credential helpers.
- Radicle - Enables developers to securely collaborate on software over a peer-to-peer network built on Git. (Web Code)
- GitDB - Allows you to access bare git repositories for reading and writing.
- gitsu - Switch git user easily.
- diff-explore - Terminal program to explore git diffs.
- Getting Things Merged (2022)
- gitrevset - Domain-specific-language to select commits in a git repo. Similar to Mercurial's revset.
- Ask HN: How are pull requests integrated in a repo with high commit frequency? (2022)
- FlyCode - Git-Based Copy and Translations Editor for Web Apps. (HN)
- How to write a Git commit message (2014) (HN)
- Changie - Automated changelog tool for preparing releases with lots of customization options.
- git-sync - Fast-forward outdated branches and remove merged and deleted upstream branches.
- Git Visual - Visualizing a Git repository. (Code)
- git-history - Tools for analyzing Git history using SQLite.
- git-vendor - Git command for managing vendored dependencies.
- smimecosign - Keyless Git signing with cosign.
- git branchstack - Efficiently manage Git branches without leaving your local branch.
- gitsign - Keyless Git signing using Sigstore.
- Ask HN: Why hasn't Git been adopted outside of software engineering? (2022)
- GitArena - Software development platform with built-in vcs, issue tracking and code review.
- git-recover -Git-recover: recover deleted files in your repository.
- Proper Use of Git Tags (2022) (HN)
- Think Like Git (2022)
- restack - Makes interactive Git rebase nicer.
- gitlint - Linting for your git commit messages.
- Git Timeline Generator - Visualize contributions to any Git project. (HN)
- Git Under the Hood (2022)
- switch-branch-cli - Switch Git branches by their pull request title.
- ugit - Undo your last oopsie in git.
- Git Switch and Restore: an Improved User Experience (2020)
- git-download - Download a single file from a Git repository.
- sema - Semantic commit tool.
- Ask HN: Why are Git submodules so bad? (2022)
- git-pile - Stacked diff support for GitHub workflows.
- Dangit, Git? (HN)
- Improve Git monorepo performance with a file system monitor (2022) (HN)
- Things I wish everyone knew about Git (2022) (HN)
- agec - Store, manage and share secrets in git repository based on age.
- Git Grab - Clone a git repository into a standard location organised by domain and path.
- Is it time to look past Git? (2022) (Lobsters)
- What Comes After Git (2022) (HN)
- GitDB - Distributed embeddable database on top of Git. (HN)
- In Praise of Stacked PRs (2022) (Lobsters)
- git-story - Tell the story of your Git project by creating video animations of your commit history directly from your Git repo.
- Things I wish everyone knew about Git (Part II) (2022) (HN) (Part 1)
- In Praise of Stacked PRs (2022) (HN)
- Faster git clones with sparse checkouts (2022)
- Git with Multiple E-Mail Addresses (2022)
- Glitter - Git tooling of the future.
- DIY code hosting with gitea and fly.io (2022)
- pkg - GitOps Toolkit common packages.