git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Philippe Blain <levraiphilippeblain@gmail.com>
To: Felipe Contreras <felipe.contreras@gmail.com>
Cc: Git mailing list <git@vger.kernel.org>,
	Denton Liu <liu.denton@gmail.com>
Subject: Regression in 'git pull --rebase --autostash' since v2.32.0
Date: Sat, 17 Jul 2021 11:29:47 -0400	[thread overview]
Message-ID: <a0071549-73f6-9636-9279-3f01143a05de@gmail.com> (raw)

Hi Felipe,

Your recent clean-up of 'git pull --autostash' seems to unfortunately have made things
worse if the pull brings new files that conflict with existing untracked files,
which makes the pull abort,
and there are tracked files with modifications (so --autostash comes into play).

Before your change, 'git pull --no-rebase --autostash' did *not* apply the autostash
after the pull failed, thus loosing modifications to tracked files (and it did not save the
stash entry !). 'git pull --rebase --autostash' correctly applied the autostash, but ended with
a strange "error: could not detach HEAD".

After your change, both 'git pull --no-rebase --autostash' and 'git pull --rebase --autostash'
have the same buggy behaviour: they do not apply the autostash and do not save it in the stash list.

I had already documented the old behaviour at [1]. Here, I copy my reproducer script
(save it as "script"):

~~~bash
#!/bin/sh

# usage: ./script <'git pull' arguments>

set -x

rm -rf test
rm -rf clone

# Create origin repo
git init test
(
cd test
date>>file
git add file
git commit -m "add file"
)
# Clone
git clone test clone
# Create new file in origin
(
cd test
date>>other
git add other
git commit -m "add other"
)
# Create the same file in clone (untracked)
(
cd clone
date>>other
# If testing '--autostash', add some modifications to 'file'
if [[ "$@" =~ "--autostash" ]]; then
   date>>file
fi
# status before pull
git status
# Try to pull
git pull "$@"
# status after pull
git status
# see if the stash was saved
git stash list
)
~~~


Here are the buggy results :

** ./script --no-rebase --autostash **

~~~
+ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
   (use "git add <file>..." to include in what will be committed)
	other

no changes added to commit (use "git add" and/or "git commit -a")
+ git pull --no-rebase --autostash
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 283 bytes | 94.00 KiB/s, done.
 From /Users/Philippe/Code/GIT-devel/BUGS/ggg-759-pull-autotash-untracked/test
    4ebab2f..fc7a169  master     -> origin/master
Updating 4ebab2f..fc7a169
Created autostash: cfd51b5
error: The following untracked working tree files would be overwritten by merge:
	other
Please move or remove them before you merge.
Aborting
+ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
   (use "git pull" to update your local branch)

Untracked files:
   (use "git add <file>..." to include in what will be committed)
	other

nothing added to commit but untracked files present (use "git add" to track)
+ git stash list
# empty!
~~~

** ./script --rebase --autostash **

~~~
+ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git restore <file>..." to discard changes in working directory)
	modified:   file

Untracked files:
   (use "git add <file>..." to include in what will be committed)
	other

no changes added to commit (use "git add" and/or "git commit -a")
+ git pull --rebase --autostash
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 223 bytes | 13.00 KiB/s, done.
 From /Users/Philippe/Code/GIT-devel/BUGS/ggg-759-pull-autotash-untracked/test
    1aa91d4..4f8c34c  master     -> origin/master
Updating 1aa91d4..4f8c34c
Created autostash: d5dffd9
error: The following untracked working tree files would be overwritten by merge:
	other
Please move or remove them before you merge.
Aborting
+ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
   (use "git pull" to update your local branch)

Untracked files:
   (use "git add <file>..." to include in what will be committed)
	other

nothing added to commit but untracked files present (use "git add" to track)
+ git stash list
# empty!
~~~

Reverting 221ec24e9b (Merge branch 'fc/pull-cleanups', 2021-07-08) brings
back the old behaviour (which is still buggy for --no-rebase).

I noticed (by reading the code and checking)
that the autostash is not completely lost, it's still pointed to by the MERGE_AUTOSTASH
special ref, but this is ref is not documented (it's just mentioned without a
clear definition).

Cheers,
Philippe.


[1] https://github.com/gitgitgadget/git/issues/759

             reply	other threads:[~2021-07-17 15:29 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-17 15:29 Philippe Blain [this message]
2021-07-17 17:03 ` Regression in 'git pull --rebase --autostash' since v2.32.0 Philippe Blain
2021-07-17 19:34 ` Felipe Contreras
2021-07-17 23:02   ` Philippe Blain
2021-07-18  3:05     ` Felipe Contreras
2021-07-23 12:17       ` Philippe Blain
2021-07-23 16:11         ` Felipe Contreras

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a0071549-73f6-9636-9279-3f01143a05de@gmail.com \
    --to=levraiphilippeblain@gmail.com \
    --cc=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=liu.denton@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).