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

Re: [PATCH v3] git checkout -b: unparent the new branch with -o

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 17, 2010, 17:17 UTC
Message-ID
<7v7hpauau1.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20100317064034.GA31749@progeny.tock>
Jonathan Nieder <jrnieder@gmail.com> writes:
Show 16 quoted lines
> Okay, fair enough.  From the point of view of plumbing, what is there
> left to do that
>
> 	git rm -f . &&
> 	git symbolic-ref HEAD refs/heads/new
>
> or
>
> 	git symbolic-ref HEAD refs/heads/new
>
> or
>
> 	git rm --cached . &&
> 	git symbolic-ref HEAD refs/heads/new
>
> does not take care of?

If we have the "just detach, don't touch index nor working tree", which happens to be the cheapest one in the middle (except that it probably wants to verify that "new" does not exist yet), the calling script of the Porcelain suite can use it in conjunction with various forms of "git rm" without incurring any additional overhead (other than a fork-and-exec), and I think that would be sufficient.

You could add
	git ls-files |
        while read path
        do
        	case $(choose-keep-drop-nuke "$path") in
                keep) ;;
                drop) git rm --cached -f "$path" ;;
                nuke) git rm -f "$path" ;;
        	esac
	done
	git symbolic-ref HEAD refs/heads/new

and have the caller supply a callback that intelligently choose what to keep and what to drop, if you want to be really fancy, but at that level of complexity, I think it is something the Porcelain writer using the plumbing would want to write himself as part of the Porcelain program.

We might want to add "git branch --switch <branchname>" that is roughly like this:

    ref="refs/heads/$branch"
    git check-ref-format "$ref" || die "malformed"
    if git rev-parse -q --verify "$ref" >/dev/null
    then
    	# exists
        exec git checkout "$branch"
    else
	# create
	exec git symbolic-ref HEAD "$ref"
    fi
Previous: Jonathan NiederNext: Erick Mattos
Message 7 of 9 in “git checkout -b: unparent the new branch with -o”
  1. git checkout -b: unparent the new branch with -oErick Mattos, Mar 16, 2010
  2. Junio C HamanoMar 16, 2010
  3. Erick MattosMar 17, 2010
  4. Jonathan NiederMar 17, 2010
  5. Junio C HamanoMar 17, 2010
  6. Jonathan NiederMar 17, 2010
  7. Junio C HamanoMar 17, 2010
  8. Erick MattosMar 17, 2010
  9. Junio C HamanoMar 17, 2010

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.