Switch Git branch without files checkout

Viewed 60044

Is it possible in Git to switch to another branch without checking out all files?

After switching branch I need to delete all files, regenerate them, commit and switch back. So checking out files is just a waste of time (and there are about 14,000 files - it is a long operation).

To make everything clear:

I need all this to upload documentation to GitHub.

I have a repository with the gh-pages branch. When I rebuild documentation locally, I copy it to the repository directory, commit and push to GitHub. But I was not happy, because I had two copies of documentation locally. And I decided to create an empty branch and after committing, switch to empty and delete files. But switching back is a long operation - so I asked this question.

I know that I can just leave on the gh-pages branch and delete files, but I don't like dirty working trees.

11 Answers

Or just use a patch file to patch from your otherbranch to your master

git diff otherbranch master > ~/tmp/otherbranch.diff
git checkout master
git apply ~/tmp/otherbranch.diff

If you are simply trying to change where a remote branch points, you can do it with "git push" without touching your local copy.

http://kernel.org/pub/software/scm/git/docs/git-push.html

The format of a <refspec> parameter is an optional plus +, followed by the source ref <src>, followed by a colon :, followed by the destination ref <dst>. It is used to specify with what <src> object the <dst> ref in the remote repository is to be updated.

eg, to update foo to commit c5f7eba do the following:

git push origin c5f7eba:foo

Not sure if that's what you were after or not.

say you want to be in branch A, but with the files from branch B

find the current commit ref of branch A with git log, e.g. "99ce9a2",

git checkout A
git reset --hard B
git reset 99ce9a2

you should now be on branch A, with a folder structure corresponding to B, which show up as unstaged changes (A history has not changed).

Related