tags:

views:

43

answers:

1

I am using git and working on master branch. This branch has a file called app.js .

I have an experiment branch in which I made a bunch of changes and tons of commit. Now I want to bring all the changes done only to app.js from experiment to master branch.

How do I do that?

Once again I do not want a merge. I just want to bring all the changes in app.js from experiment branch to master branch.

+4  A: 
git checkout master               # first get back to master
git checkout experiment -- app.js # then copy the version of app.js 
                                  # from branch "experiment"

See also git how to undo changes of one file?

As Jakub Narębski mentions in the comments:

git show experiment:path/to/app.js > app.js

works too, except that, as detailed in the SO question "How to retrieve a single file from specific revision in Git?", you need to use the full path form the root directory of the repo.
Hence the path/to/app.js used by Jakub in his example.

As Frosty mentions in the comment:

you will only get the most recent state of app.js

But, for git checkout or git show, you can actually reference any revision you want, as illustrated in the SO question "git checkout revision of a file in git gui":

$ git show $REVISION:$FILENAME
$ git checkout $REVISION -- $FILENAME

would be the same is $FILENAME is a full path of a versioned file.

$REVISION can be as shown in git rev-parse:

experiment@{yesterday}:app.js # app.js as it was yesterday 
experiment^:app.js            # app.js on the first commit parent
experiment@{2}:app.js         # app.js two commits ago

and so on.

VonC
the link is useful. Thanks
Nadal
One note: you will only get the most recent state of app.js, you will not get any history carried over from the experiment branch.
Frosty
understood. Thanks @frosty.
Nadal
Or `git show experiment:path/to/app.js > app.js`
Jakub Narębski