Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Problem: I need somehow to checkout an existing branch of a project that is already cloned locally on my file system without being in that particular folder of this project.
Solution: I'm trying to do the following:
git clone 'github-project-url' 'file-system-folder'
git checkout 'existing-branch' 'file-system-folder'
I do realize that second step is not quite right, but I also am trying to avoid to
cd 'file-system-folder'
.
–
–
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
–
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'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
–
–
–
–
–
git 2.5 added the ability to have multiple working trees using git worktree. So this case, you'd use something like
git worktree add -b new-branch-name ../dir-name existing-branch
you can then change to dir-name and make your commits as usual. The commits will end up in your original repository (where you used worktree add
).
When you're done and everything you want is committed, you can delete the dir-name
folder and run git worktree prune
to clean up the orphaned worktree in your repo.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.