Show 50 quoted lines
> Le 31 janv. 2022 à 17:27, Sergey Organov <sorganov@gmail.com> a écrit :
>
> Géry Ogam <gery.ogam@gmail.com> writes:
>
>> Hello,
>>
>> I would like to stage, test, and commit only *some* changes of the
>> working tree, and then repeat this process with the remaining changes.
>>
>> My current solution (published at
>> https://stackoverflow.com/a/70914962/2326961):
>>
>> 1. Stage some changes:
>> ```
>> git add -p file
>> ```
>> 2. Save away the remaining changes:
>> ```
>> git diff >patch
>> git stash push -k
>> ```
>> 3. Test the staged changes.
>> 4. Commit the staged changes:
>> ```
>> git commit
>> ```
>> 5. Restore the remaining changes:
>> ```
>> git apply patch
>> ```
>> 6. Go to step 1.
>>
>> It is not ideal because a) it uses a patch file for saving the
>> remaining changes; b) it uses the stash only for setting the working
>> tree to the index state.
>>
>> It would be ideal if I could save *only* the remaining changes in the
>> stash instead of resorting to a patch file. How to do it?
>
> It looks like you don't need patch file for this workflow. What's wrong with:
>
> git add...
> git stash push --keep-index
> ... check, git add fixes
> git commit
> git stash apply
>
> ???
>
> -- Sergey Organov
Hello Sergey,
`git stash` saves the transition from the HEAD state to the working tree state. It also sets the working tree to the *HEAD* state.
`git stash --keep-index` saves the transition from the HEAD state to the working tree state. It also sets the working tree to the *index* state.
`git stash pop` applies the last saved transition. So if the working tree was not in HEAD state (like after `git stash --keep-index`), there will be a conflict.
Best,
Géry Ogam