git checkout branch from outside
You're quite welcome to use --git-dir
and --work-tree
to avoid cd'ing, but honestly, it's easier just to cd. To avoid having to cd back, you can do it in a subshell:
git clone foo foo-copy
(cd foo-copy && git checkout branch)
Of course, in this specific case, you don't actually need two commands:
git clone -b <branch-to-checkout> foo foo-copy
Since Git version 1.8.5, you can also use -C <path>
option. Be sure to use it before any other command:
git -C ~/my-git-repo checkout master
Note that it doesn't have to be specifically the .git folder. Here is the man documenation:
-C <path> Run as if git was started in <path> instead of the current working directory. When multiple -C options are given, each subsequent non-absolute -C <path> is interpreted relative to the preceding -C <path>. This option affects options that expect path name like --git-dir and --work-tree in that their interpretations of the path names would be made relative to the working directory caused by the -C option. For example the following invocations are equivalent: git --git-dir=a.git --work-tree=b -C c status git --git-dir=c/a.git --work-tree=c/b status
You can use --git-dir
to specify the .git
directory to use as the repository, and --work-tree
to specify the working tree to to the checkout in. See the git
man page for details.
git --git-dir=file-system-folder/.git --work-tree=file-system-folder checkout existing-branch
git clone ./foo ./foo-copy
git --git-dir=./foo-copy/.git --work-tree=./foo-copy checkout branch