Table of Contents

To see how branches relate

$ git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project

Or use “gitk –all”

Generate patch and apply to branch with different commit history

Generate patches for local commits from origin/1.x

$ git format-patch -k -o ~/patches_dir/ origin/1.x

Check if a forced update is pending

$ git fetch --dry-run
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (26/26), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 26 (delta 12), reused 21 (delta 7), pack-reused 0
Unpacking objects: 100% (26/26), done.
From https://somerepo
 + 1ec508d...c046c5f 1.x        -> origin/1.x  (forced update)

Update local branch when we know there is going to be a forced update

$ git checkout master # Needs to be performed before doing fetch
$ git fetch
$ git branch -D 1.x
$ git checkout -b mybranch-1.x origin/1.x

Apply patches to branch

$ cat ~/patches_dir/* | git am -k

Script to automate fetching and re-applying patches

#!/bin/sh
 
localbranch=mybranch-1.x
remotebranch=1.x
patchdir=~/patches_dir
repodir=~/the_cloned_repo
 
# Generate patches
# git format-patch -k -o "$patchdir" origin/$remotebranch
 
( cd $repodir
  # Apply patches
  git checkout master # Needs to be run before fetch
  git branch -D $localbranch-old
  git branch -m $localbranch $localbranch-old
  git fetch
  git checkout -b $localbranch origin/$remotebranch
  cat "$patchdir"/*.patch | git am -k
)

Update intermediary bare repo

Found some good info here.
How do I update my bare repo

First fetch from the upstream server

git fetch

Then you need to update any branches that you want to expose to the downstream repositories.
Examples for master, 13.0 and all remote branches.
Avoid *:* if upstream repo is very big and you want to limit the branches used by downstream repositories.

git fetch origin master:master
git fetch origin 13.0:13.0
git fetch origin '*:*'