Re: Why does "git pull --rebase" require a clean git directory?

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

 



On 2020-12-10 at 22:15:11, Shupak, Vitaly wrote:
> Hi,
> 
> "git pull --rebase" requires having NO uncommitted changes, even if
> the locally modified files haven't been updated upstream, or even if
> there are no changes to upstream at all. I know I could use
> --autostash, but that's inefficient and may be undesirable if it would
> create a conflict.
> 
> Would it be possible to change the behavior of "git pull --rebase" so
> that it only fails if the locally modified files conflict with the
> files modified upstream (similar to the default git pull behavior
> without --rebase)?

I suspect the reason for the difference is in how the two pieces of code
work.  A merge in general can work in a dirty tree whereas a rebase
cannot.  That, in turn, is because the merge code merges two files
internally and then writes them out to the working tree, whereas the
rebase code, at least in some cases, doesn't contain the same
precautions not to modify the working tree.

Moreover, a merge is a single operation, so it's safe to operate on a
commit and then give up.  A rebase consists of multiple operations, so
we'd have to evaluate each operation and synthesize it, internally
performing the merge (or apply) that's a part of it, in order to
determine if it would conflict.  Otherwise, we'd have to just try it and
somehow abort cleanly in the middle without otherwise dirtying the
working tree.  Right now, that abort step involves a reset --hard, which
is going to blow away your data.

So is it possible to do?  Sure.  Is it easy?  Not especially with the
current code.  So certainly it could be done if it were important to
someone, but it will likely be a good bit of work.

Sorry this wasn't the news you were hoping for.  I'd love to have some
easy solution that I could offer to send in a patch for this weekend to
solve this, but unfortunately it's not that easy.
-- 
brian m. carlson (he/him or they/them)
Houston, Texas, US

Attachment: signature.asc
Description: PGP signature


[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