All of lore.kernel.org
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Toon Claes <toon@iotcl.com>, Patrick Steinhardt <ps@pks.im>,
	git@vger.kernel.org
Subject: Re: git-history(1) fixup broken with worktrees?
Date: Sat, 18 Jul 2026 10:31:18 +0100	[thread overview]
Message-ID: <e7dbcede-4486-459c-aa64-e44690e01fe0@gmail.com> (raw)
In-Reply-To: <87jyqt1m6g.fsf@emacs.iotcl.com>

Hi Toon

On 17/07/2026 19:54, Toon Claes wrote:
> 
> Imagine this repoducer:
> 
>      $ git init
>      $ echo Hello > README
>      $ git add .
>      $ git commit -m'initial commit'
>      $ git worktree add ../feature
>      $ echo world >> README
>      $ git add .
>      $ git history fixup HEAD
>      $ cd ../feature
> 
> Now running git-status(1) in that other worktree gives me:
> 
>      $ git status
> 
>      On branch feature
>      Changes to be committed:
>        (use "git restore --staged <file>..." to unstage)
>              modified:   README
> 
> And:
> 
>      $ git diff --staged
> 
>      diff --git a/README b/README
>      index 65a56c3..e965047 100644
>      --- a/README
>      +++ b/README
>      @@ -1,2 +1 @@
>       Hello
>      -world
> 
> 
> So suddenly my other worktree is dirty? With staged changes?
> And I didn't even touch it.
I think what's happening is that the branch "feature" is updated because 
the commit it points to is rewritten, but the index and working copy in 
the work tree "feature" are not. Rebase's --update-refs option refuses 
to update branches that are checked out in other workers by default to 
avoid exactly this problem[1]. As you can see in that thread there was 
some discussion about updating the index and working copy when the work 
tree is clean instead. I think that is a friendlier approach as it 
preserves the relationships between branches and avoids materializing 
changes in other worktrees.

On a related note, rebase refuses to rewrite a branch that is being 
rewritten by another rebase running in a different work tree. That's an 
important safety measure that I think the history command is missing.

Thanks

Phillip

[1] 
https://lore.kernel.org/git/9354d1d3-c1b7-3baf-215f-30659ad48b22@github.com/

> Now the commit history is correct:
> 
>      $ git log --graph --oneline --all
> 
>      * 16ef548 (HEAD -> feature, main) initial commit
> 
> 
> 


      reply	other threads:[~2026-07-18  9:31 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-17 18:54 git-history(1) fixup broken with worktrees? Toon Claes
2026-07-18  9:31 ` Phillip Wood [this message]

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

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

  git send-email \
    --in-reply-to=e7dbcede-4486-459c-aa64-e44690e01fe0@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=ps@pks.im \
    --cc=toon@iotcl.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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.