--- title: Sync all Git branches with remote slug: git-sync-all date: 2022-12-02 taxonomies: tags: ["git", "tricks"] extra: medium: https://medium.com/p/afb6a165936e --- Sometimes there is no good internet connection, but you can still work at your laptop (merge PR, etc). It’s very handy to have a local full local copy of the Git repository of a project on your computer for this purpose. Unfortunately, Git itself doesn’t have out-of-the-box functionality to sync your local repository with a central server (like Github). I searched for a solution on stackoverflow, but surprisingly there are only separate commands to do different parts of this task. So I made this little script in bash to be able to do this synchronisation. ```sh #!/usr/bin/env bash # Debug: Print all commands with expanded variables # set -x # Get all remote refs & remove outdated local refs git fetch --all --prune # Create local copy of remote branch & load latest changes for rb in `git branch --remotes | grep -v 'HEAD'`; do lb=${rb#origin/} echo "$rb -> $lb" git branch --track $lb $rb 2>/dev/null git fetch --update-head-ok origin $lb:$lb done # Remove all merged local branches git branch --merged | xargs echo | grep -v '^*\|^main$\|^develop$|^stage$' | xargs git branch -d ``` _Note: On line 18 you can specify a list of branches that should always remain local._ This script will also be useful if you often have to check other branches manually before merging them. Installation & Run: ```sh curl https://gist.githubusercontent.com/vladkens/5261c703111fd1d0a870c3bf5e53c698/raw/698af0fdac327bcb3b7d8777a4593a4d66321bb6/git-sync.sh > git-sync.sh chmod +x git-sync.sh ./git-sync.sh ```