From: Ben Knoble Date: Sat, 05 Sep 2026 18:59:25 GMT Subject: Re: [PATCH 0/2] push: fix --force-if-includes consulting wrong ref Message-ID: In-Reply-To: <20260904210122.431757-1-tyler@tylercipriani.com> > Le 4 sept. 2026 à 17:01, Tyler Cipriani 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]: > [1]: > > 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.