How do you copy a specific git commit to the staging area?
git
Solution
The `git checkout` command writes through the index/staging-area to the work directory, so checking out files does the job (though it updates the work directory whether you want that or not).
The problem, of course, is that `git checkout commit` switches branches, or detaches HEAD. The trick to avoid this is to check out specific files, which avoids this branch-switching:
git checkout branch-one -- path/to/file.ext
If you check out the entire tree, you'll get all the files. Assuming you're in the top level directory:
git checkout branch-one -- .
will do the trick.
One other caveat: this will not remove from the staging area any file that does not exist in `branch-one`. If you want that as well, start by removing everything (the staging area will get repopulated by checking out all the files in the other branch):
git rm -rf .
git checkout branch-one -- .
(adjust as needed if you don't want to copy the other branch's .gitignore, etc; note that you can restore specific files from `branch-two`, aka `HEAD`, with:
git checkout HEAD -- path
if desired).
(As usual, be sure the state of the work directory is clean before doing this.)
Problem
I want to copy the last commit from one branch (ie `branch-one`) to the staging area of another branch (ie `branch-two`). Is this possible and if so how is it done?