Overview
Remote tracking branches, and how they work.
Terminology
master: local tracking branch (in local object store)origin/master: remote tracking branch (in local object store)masteron remote system: remote branch
All of these branches can be “out of sync” with one another.
Simple example
Examples using the Linux kernel source repository.
$ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean $
Local tracking branch:
$ git show master
commit 1c163f4c7b3f621efff9b28a47abb36f7378d783 (HEAD -> master, tag: v5.0, origin/master, origin/HEAD)
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date: Sun Mar 3 15:21:29 2019 -0800
Linux 5.0
diff --git a/Makefile b/Makefile
index ac5ac28a24e9..d5713e7b1e50 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
VERSION = 5
PATCHLEVEL = 0
SUBLEVEL = 0
-EXTRAVERSION = -rc8
+EXTRAVERSION =
NAME = Shy Crocodile
# *DOCUMENTATION*
$
Corresponding remote tracking branch:
$ git show origin/master
commit 1c163f4c7b3f621efff9b28a47abb36f7378d783 (HEAD -> master, tag: v5.0, origin/master, origin/HEAD)
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date: Sun Mar 3 15:21:29 2019 -0800
Linux 5.0
diff --git a/Makefile b/Makefile
index ac5ac28a24e9..d5713e7b1e50 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
VERSION = 5
PATCHLEVEL = 0
SUBLEVEL = 0
-EXTRAVERSION = -rc8
+EXTRAVERSION =
NAME = Shy Crocodile
# *DOCUMENTATION*
$
Fetch, but do not merge, which updates the remote tracking branch, but not the local tracking branch:
$ git fetch remote: Counting objects: 53547, done. remote: Compressing objects: 100% (20826/20826), done. remote: Total 53547 (delta 38450), reused 43614 (delta 32435) Receiving objects: 100% (53547/53547), 41.90 MiB | 11.16 MiB/s, done. Resolving deltas: 100% (38450/38450), done. From https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux 1c163f4c7b3f..1fc1cd8399ab master -> origin/master $
git status will now show that you are considerably behind the remote tracking branch:
$ git status On branch master Your branch is behind 'origin/master' by 6622 commits, and can be fast-forwarded. (use "git pull" to update your local branch) nothing to commit, working tree clean $
And you can show the tip of origin/master:
$ git show origin/master
commit 1fc1cd8399ab5541a488a7e47b2f21537dd76c2d (origin/master, origin/HEAD)
Merge: abf7c3d8ddea 6a613d24effc
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date: Thu Mar 7 10:11:41 2019 -0800
Merge branch 'for-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup updates from Tejun Heo:
- Oleg's pids controller accounting update which gets rid of rcu delay
in pids accounting updates
- rstat (cgroup hierarchical stat collection mechanism) optimization
- Doc updates
* 'for-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
cpuset: remove unused task_has_mempolicy()
cgroup, rstat: Don't flush subtree root unless necessary
cgroup: add documentation for pids.events file
Documentation: cgroup-v2: eliminate markup warnings
MAINTAINERS: Update cgroup entry
cgroup/pids: turn cgroup_subsys->free() into cgroup_subsys->release() to fix the accounting
$
Working with a remote tracking branch
You can treat a remote tracking branch just like any other branch in that you can look, compare, cherry-pick and so on, but you can't check it out to make changes to it:
$ git checkout origin/master Checking out files: 100% (6413/6413), done. Note: checking out 'origin/master'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 1fc1cd8399ab Merge branch 'for-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup $
If you want to incorporate all of that into your local tracking branch, you can just:
$ git checkout master $ git merge origin/master