git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] sequencer: refuse to revert shallow boundary commits by default

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 21, 2026, 19:11 UTC
Message-ID
<xmqqqzhina26.fsf@gitster.g>
In-Reply-To
<7179f371-a709-476f-8e94-807d7b62ce6e@gmail.com>
Phillip Wood <phillip.wood123@gmail.com> writes:
Show 23 quoted lines
> Hi Nakul
>
> On 21/10/2026 11:09, Nakul V S via GitGitGadget wrote:
>> From: Nakul V S <vsnakul@gmail.com>
>> 
>> When a repository is cloned with --depth=1, Git records the boundary
>> commit in .git/shallow and rewrites its parent links via the graft
>> mechanism, making it appear as a root commit. Reverting such a commit
>> will therefore delete all tracked files, which is almost always
>> unintended by the user.
>> 
>> Add a check in do_pick_commit() that detects when the target commit is
>> a shallow boundary (nr_parent < 0 in the commit graft) and refuses the
>> operation by default. A new --allow-shallow-boundary flag is provided
>> for the rare cases where the user genuinely intends this behavior.
>
> Thanks for working on this, it is a useful and timely improvement as 
> there was some discussion about improving the behavior of git with 
> regard to shallow boundaries at the recent git merge conference. I 
> wonder if it would be better to refuse to cherry-pick and rebase a 
> shallow boundary commit as well. Do you know of a sensible use for 
> reverting a shallow boundary or is the new option added out of caution 
> in case someone wants it?
Very good point.

The next natural question is where the modification should go if we want to make sure we protect these shallow boundaries not just from revert but also from "cherry-pick", "rebase", and possibly "commit --amend". Is sequencer.c:do_pick_commit() the right place to cover all of them? If not, would it make sense to have a helper function that different code paths to protect shallow boundaries from these operations can call, and add the first call to that helper funcion to the location this patch adds new code to?

Thanks.
Previous: Phillip WoodNext: Phillip Wood
Message 3 of 9 in “sequencer: refuse to revert shallow boundary commits by default”
  1. sequencer: refuse to revert shallow boundary commits by defaultNakul V S via GitGitGadget, Oct 21, 2026
  2. Phillip WoodOct 21, 2026
  3. Junio C HamanoOct 21, 2026
  4. Phillip WoodOct 26, 2026
  5. Nakul V SOct 31, 2026
  6. Nakul V SOct 31, 2026
  7. Nakul V SOct 31, 2026
  8. sequencer: refuse to pick or revert shallow boundary commitsNakul V S via GitGitGadget, Oct 31, 2026
  9. Junio C HamanoNov 1, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.