Git development
 help / color / mirror / Atom feed
From: Ben Knoble <ben.knoble@gmail.com>
To: Tyler Cipriani <tyler@tylercipriani.com>
Cc: git@vger.kernel.org,
	Srinidhi Kaushik <shrinidhi.kaushik@gmail.com>,
	Stefan Haller <lists@haller-berlin.de>,
	Phillip Wood <phillip.wood123@gmail.com>,
	Johannes Schindelin <johannes.schindelin@gmx.de>,
	Tyler Cipriani <tyler@tylercipriani.com>
Subject: Re: [PATCH 0/2] push: fix --force-if-includes consulting wrong ref
Date: Sat, 5 Sep 2026 14:59:25 -0400	[thread overview]
Message-ID: <D798198C-5F97-4701-9050-7868B6482214@gmail.com> (raw)
In-Reply-To: <20260904210122.431757-1-tyler@tylercipriani.com>


> Le 4 sept. 2026 à 17:01, Tyler Cipriani <tyler@tylercipriani.com> a écrit :
> 
> --force-if-includes has been checking the reflog of the local branch named
> after the destination branch regardless of what's being pushed. This can cause
> false rejections or unintended data loss.
> 
> False rejection has been reported twice that I could find:
> 
> - 2023-07-26 - Stefan Haller reported local branch with a different name
>              false rejection[0]
> - 2025-05-08 - D. Ben Knoble reported detached HEAD false rejection[1]

Aha. I’d nearly forgotten that mail, and have since adjusted to
some intuition of when to force-if-includes.

I’d be grateful to not need such potentially-buggy intuition :)

> The same root cause can result in data loss: when a same-name local branch
> contains the remote tip but you --force-if-includes push an unrelated branch,
> clobbering the remote repo. PoCs are in t/t5533-push-cas.sh -- new test cases
> fail against maint, but pass with patches applied.
> 
> Existing tests covered refspecs with different names for --force-with-lease,
> but missed --force-if-includes. New patches cover:
> 
> - allow forced-update using refspec with different-named local branch
> - allow same as above, but with HEAD
> - reject force-update using refspec with different-named local branch lacking
> branch tip
> - reject same as above using HEAD
> - reject detached HEAD
> 
> Open question: the detached HEAD case. I opted to reject, since it seems like
> it might be surprising to allow in the case where you were just on a branch
> without the the tip of a remote ref, removed the last commit with git checkout
> HEAD^ and pushed with --force-if-includes and it allowed a destructive push.
> I made a separate patch showing different advice for that case (since a
> git pull won't help).
> 
> Based on maint since this is a bugfix. Happy to split patches any way
> that's helpful.
> 
> [0]: <https://lore.kernel.org/git/f51c73ed-eb03-83ca-fb31-d3e2645c9a63@haller-berlin.de>
> [1]: <https://lore.kernel.org/git/CALnO6CCk0SgwObQRnpd5Pt_DvCKF8dBmyVHivU6Nr_O-GusGLA@mail.gmail.com>
> 
> Tyler Cipriani (2):
> push: check pushed ref for --force-if-includes
> push: fix --force-if-includes detached HEAD advice

Thanks for the advice changes! One small nit on the first
patch you can ignore if you choose.

At first I hoped we might be able to stop rejecting detached
HEAD pushes, but some further thought begs the question:
what reflog would we use?
HEAD’s is too broad :)

So this may be all we can do for now.

At least I can replace my intuition with reading the error message again. 

  parent reply	other threads:[~2026-09-05 18:59 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-04 21:01 [PATCH 0/2] push: fix --force-if-includes consulting wrong ref Tyler Cipriani
2026-09-04 21:01 ` [PATCH 1/2] push: check pushed ref for --force-if-includes Tyler Cipriani
2026-09-05 18:57   ` Ben Knoble
2026-09-04 21:01 ` [PATCH 2/2] push: fix --force-if-includes detached HEAD advice Tyler Cipriani
2026-09-05 18:59 ` Ben Knoble [this message]
2026-09-06 20:24   ` [PATCH 0/2] push: fix --force-if-includes consulting wrong ref Tyler Cipriani
2026-09-08 22:20 ` [PATCH v2 " Tyler Cipriani
2026-09-09 11:59   ` D. Ben Knoble
2026-09-08 22:20 ` [PATCH v2 1/2] push: check pushed ref for --force-if-includes Tyler Cipriani
2026-09-10 18:43   ` Junio C Hamano
2026-09-10 22:08     ` Tyler Cipriani
2026-09-08 22:20 ` [PATCH v2 2/2] push: fix --force-if-includes detached HEAD advice Tyler Cipriani
2026-09-10 23:05 ` [PATCH v3 0/2] push: fix --force-if-includes consulting wrong ref Tyler Cipriani
2026-09-10 23:05   ` [PATCH v3 1/2] push: check pushed ref for --force-if-includes Tyler Cipriani
2026-09-11  6:55     ` Patrick Steinhardt
2026-09-11 22:58       ` Tyler Cipriani
2026-09-11 15:31     ` Junio C Hamano
2026-09-11 23:47       ` Tyler Cipriani
2026-09-10 23:05   ` [PATCH v3 2/2] push: fix --force-if-includes detached HEAD advice Tyler Cipriani
2026-09-11  6:55     ` Patrick Steinhardt
2026-09-11 16:03       ` Junio C Hamano
2026-09-11 15:40     ` Junio C Hamano

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=D798198C-5F97-4701-9050-7868B6482214@gmail.com \
    --to=ben.knoble@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=johannes.schindelin@gmx.de \
    --cc=lists@haller-berlin.de \
    --cc=phillip.wood123@gmail.com \
    --cc=shrinidhi.kaushik@gmail.com \
    --cc=tyler@tylercipriani.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox