Re: unwanted interaction of git stash and cherry-pick --abort

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Brian,

Thanks for the quick reply.

Unfortunately, I forgot an essential line in my first e-mail, thus I've resent my e-mail shortly later again.

To "fix" your shell script (make the files get lost), git stash pop should be inserted before the last line:

----
#!/bin/sh

git init-db --object-format=sha256
git commit --allow-empty -m +
oid=$(git rev-parse HEAD)
echo a > a
echo b > b
git add a b # some arbitrary files with content
git stash
git cherry-pick $oid
git stash pop
git cherry-pick --abort
----

So it is basically about unexpected adding of files, that got discarded via a "git cherry-pick --abort".

Btw. the files can be recovered via

----
#!/usr/bin/env bash

headcommit="$(git log --format=format:%H)"
headcommitobject=".git/objects/${headcommit:0:2}/${headcommit:2}"
mkdir recovering_lost_files
find .git/objects/ -type f -daystart -ctime 0|while read -r path
do
    obj="${path#.git/objects/}"
    obj="${obj/\/}"
    git cat-file -p $obj > recovering_lost_files/$obj
done
----

best regards,
Markus


Am 20.04.25 um 15:37 schrieb brian m. carlson:
On 2025-04-20 at 13:14:31, Markus Raab wrote:
Dear git maintainers,

What did you do before the bug happened? (Steps to reproduce your issue)

git init-db
git commit --allow-empty # needed for git stash later
echo a > a
echo b > b
git add a b # some arbitrary files with content
git stash
git cherry-pick 170bbe5 # any commit that cannot be applied, e.g. the
initial commit here
git cherry-pick --abort

Here's the exact shell script I used to test this case:

----
#!/bin/sh

git init-db --object-format=sha256
git commit --allow-empty -m +
oid=$(git rev-parse HEAD)
echo a > a
echo b > b
git add a b # some arbitrary files with content
git stash
git cherry-pick $oid
git cherry-pick --abort
----

What did you expect to happen? (Expected behavior)

That a and b are still there or I am somehow informed that the files a and b
would get lost.

What happened instead? (Actual behavior)

The files a and b are lost.

What's different between what you expected and what actually happened?

Loss of data.

Anything else you want to add:

Everything fine, only the content of a and b is lost ;(

I don't think these are lost.  Because they were added, they were saved
in the stash with `git stash` and can be recovered from there with `git
stash pop`.  `git cherry-pick` won't have done anything to modify the
stashes and in my test case, I can see `git stash list -p` shows both of
those files.

Is this also the case for you or is your situation maybe a little
different?


--
Best regards,
Markus Raab




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux