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

Re: git push --confirm ?

From
Jeff King <peff@peff.net>
Date
Sep 12, 2009, 18:43 UTC
Message-ID
<20090912184342.GB20561@coredump.intra.peff.net>
In-Reply-To
<1252777897.2974.24.camel@localhost.localdomain>
On Sat, Sep 12, 2009 at 01:51:37PM -0400, Owen Taylor wrote:
Show 13 quoted lines
>  * An initial --dry-run pass is done but with more verbosity -
>    for updates of existing references, it would show what commits
>    were being added or removed in a one-line format.
> 
>  * The user is prompted if they want to proceed
>  
>  * If the user agrees, then the push is run without --dry-run
>
> [...]
>
> I think this wouldn't be too hard to add to 'git push', though
> I haven't tried to code it. Yes, it's not atomic without protocol
> changes - I think that's OK:

I have never wanted such a feature, so maybe I am a bad person to comment, but I don't see much advantage from a UI standpoint over what we have now. Which is "git push --dry-run", check to see if you like it, and then re-run without --dry-run. If you just want to see more output in the first --dry-run, then that is easy to do with an alternate format.

But what _would_ be useful is doing it atomically. You can certainly do all three of those steps from within one "git push" invocation, and I think that is enough without any protocol changes. The protocol already sends for each ref a line like:

  <old-sha1> <new-sha1> <ref>

and receive-pack will not proceed with the update unless the <old-sha1> matches what is about to be changed.

Show 5 quoted lines
>  - If the push isn't being forced intermediate ref updates will
>    be caught as a non-fast-forward in the second pass.
> 
>  - If the push is being forced, you might overwrite someone else's
>    push anyways even without --confirm.

Yeah, "--force" is not very fine-grained. I wonder if rather than a complete --confirm you would rather have something iterative like:

  $ git push --interactive
  Pushing to server:/path/to/repo.git
    * [new branch]      topic -> topic
  Push this branch [Yn]?
      5ad9dce..cfc497a  topic -> topic
  Push this branch [Yn]?
      5ad9dce...cfc497a topic -> topic (non-fast forward)
  Force this branch [yN]?

where of course the actual output text and y/n defaults are subject to debate. You could even have a 'v' option at each prompt to visualize the differences in gitk so you can easily get more information on what you might be overwriting in a non-fast-forward scenario.

-Peff
Previous: Owen TaylorNext: Owen Taylor
Message 2 of 10 in “git push --confirm ?”
  1. Owen TaylorSep 12, 2009
  2. Jeff KingSep 12, 2009
  3. Owen TaylorSep 12, 2009
  4. Jeff KingSep 12, 2009
  5. Daniel BarkalowSep 12, 2009
  6. Junio C HamanoSep 13, 2009
  7. Jeff KingSep 13, 2009
  8. Junio C HamanoSep 13, 2009
  9. Jeff KingSep 13, 2009
  10. Uri OkrentSep 13, 2009

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.