How can I format patch with what I stash away

58,127

Solution 1

Sure, git stash show supports this:

git stash show -p

So, use

git stash list

to find out the number of the stash that you want to export as a patch, then

git stash show -p stash@{<number>} > <name>.patch

to export it.

For example:

git stash show -p stash@{3} > third_stash.patch

Solution 2

This answer provides info about both saving the patch and applying it where you want to use it.

To stash the output in a file:

 git stash show -p --color=never > my-patch-name.patch

Verify patch looks good:

git apply --stat my-patch-name.patch

Verify no errors:

git apply --check my-patch-name.patch

Apply the patch

git apply my-patch-name.patch

Solution 3

Above solutions won't work for binary data. The following add support for it:

git stash show stash@{0} -p --binary

Edit

Note: I just wanted to add a comment to above replies but my reputation is not sufficient.

Solution 4

Use

$> git stash list
stash@{0}: WIP on master: 84fx31c Merged with change to /public/
stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter

to get a list of your recently stashed stuff. Git actually creates commit objects when you stash.

They are commits like everything else. You can check them out in a branch:

$> git checkout -b with_stash stash@{0}

You can then publish this branch and you colleague can merge or cherry-pick that commit.

Solution 5

I believe this might be one of the udpates from Git recently. You don't have to patch the changes you stashed away any more. you can just apply your stashed changes on one branch to another.

Say on branch A you have stashed away some changes, referred as stash@{1}.

you now switch to branch B. you can just do:

$git stash apply stash@{1}

this applies your branch A changes onto branch B.

Share:
58,127

Related videos on Youtube

silverburgh
Author by

silverburgh

Updated on February 25, 2022

Comments

  • silverburgh
    silverburgh about 2 years

    In git, I stash away my changes. Is it possible that I can create a patch with what I stash away? And then apply that patch in some other repository (my co-worker's)?

    I know git format-patch -1, but I think that it's for what I have committed. But I am looking for the same thing for changes that I stashed away.

    And how can I apply a patch in other repository?

  • silverburgh
    silverburgh about 14 years
    I have a related question about apply a patch. Let's say my patch touches multiple files. Is there a way to apply the patch 'interactively'? Pick which files of the patch I should apply the patch against? Can I do that?
  • Greg Hewgill
    Greg Hewgill about 14 years
    @silverburgh: I had a quick look through man patch and I didn't see any options for interactive patch application. However, since patch files are plain text files themselves, usually what one would do is edit the patch in a text editor to clip out the relevant parts to apply with patch. Alternately, if you're applying the patch into another Git repository, you could apply it all and then selectively git checkout files that you didn't want to change (git checkout with a filename throws away unstaged changes).
  • Kelvin
    Kelvin over 12 years
    @silverburgh you can restrict the set of files patched using the "--exclude" and "--include" params of git apply.
  • Alexander Oh
    Alexander Oh about 11 years
    @silverburgh you can do the following assume you have a patch. apply the patch fully and then do git add --interactive ${YOUR_FILES} and it will give you the chance to partially commit.
  • Paul Beckingham
    Paul Beckingham about 11 years
    I needed to use this, to shut off the color: git stash show -p --color=never > wip.patch
  • Ryan
    Ryan almost 10 years
    Thanks. This worked for me: git stash show -p stash@{1} > patch.txt
  • Craig Boland
    Craig Boland over 8 years
    This one worked for me with plain text code files, but I had to account for white space. Verify patch looks good: git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patch Apply the patch: git apply --ignore-space-change --ignore-whitespace my-patch-name.patch
  • Ryan
    Ryan over 5 years
    This didn't seem to work if your stash contained new files! See stackoverflow.com/questions/22818155/…
  • Max
    Max about 5 years
    Nice and concise explanation. For it to work I had to be in the repo root when applying the patch, else git apply didn't pick up the diff.
  • Greg
    Greg about 3 years
    stash filter should be before the p option, at least on windows git: git stash show stash@{<number>} -p > <name>.patch