> For the complete documentation index, see [llms.txt](https://www.null-pointer.co.uk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.null-pointer.co.uk/git.md).

# Git

## delete all merged branches

delete all remote branches that have already been merged into master [1](https://www.null-pointer.co.uk/git.html#fn_1)

```
git push origin --delete $(git branch -r --merged origin/master \
| grep origin \
| egrep -v '>|master|develop' \
| cut -d/ -f2-)
```

This can produce errors with refs. If this happens I recommend:

```
git branch -r --merged origin/master \
| grep origin \
| egrep -v '>|master|develop' \
| cut -d/ -f2- > all.txt
```

putting all the errors in to error.txt

then running:

```
comm -23 all.txt error.txt > delete.txt
```

> -23 suppresses the lines that are in both files, or only in file 2. The files have to be sorted (they are in your example) but if not, pipe them through sort first...[2](https://www.null-pointer.co.uk/git.html#fn_2)

## removing references to deleted remote branches

This command show the remote branch, but it sometimes shows branches that have been deleted.

```
git branch -r
```

To remove them

```
git remote prune origin
```

## Syncing a fork

### Configuring a remote for a fork

* List the current configured remote repository for your fork.

  ```
  git remote -v
  origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
  origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
  ```
* Specify a new remote upstream repository that will be synced with the fork.

  ```
  git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
  ```
* Verify the new upstream repository you've specified for your fork.

  ```
  git remote -v
  origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
  origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
  upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
  upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
  ```

  **Syncing a fork**

  Sync a fork of a repository to keep it up-to-date with the upstream repository.
* Change the current working directory to your local project.
* Fetch the branches and their respective commits from the upstream repository. Commits to ''master'' will be stored in a local branch, ''upstream/master''.

  ```
  git fetch upstream
  remote: Counting objects: 75, done.
  remote: Compressing objects: 100% (53/53), done.
  remote: Total 62 (delta 27), reused 44 (delta 9)
  Unpacking objects: 100% (62/62), done.
  From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
  * [new branch]      master     -> upstream/master
  ```
* Check out your fork's local ''master'' branch.

  ```
  git checkout master
  Switched to branch 'master'
  ```
* Merge the changes from ''upstream/master'' into your local ''master'' branch. This brings your fork's ''master'' branch into sync with the upstream repository, without losing your local changes.

  ```
  git merge upstream/master
  Updating a422352..5fdff0f
  Fast-forward
  README                    |    9 -------
  README.md                 |    7 ++++++
  2 files changed, 7 insertions(+), 9 deletions(-)
  delete mode 100644 README
  create mode 100644 README.md
  ```

### Get all tags

```
git fetch --all --tags
```

* > 1\. [delete all remote branches that have already been merged into master](https://gist.github.com/schacon/942899)[ ↩](https://www.null-pointer.co.uk/git.html#reffn_1)
* > 2\. [How to remove the lines which appear on file B from another file A?](https://stackoverflow.com/questions/4366533/how-to-remove-the-lines-which-appear-on-file-b-from-another-file-a), by The Archetypal Paul (Dec 6, 2010) *Stack Overflow*[ ↩](https://www.null-pointer.co.uk/git.html#reffn_2)
