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

Re: [PATCH v3 0/4] doc: git-push: clarify DESCRIPTION section

From
D. Ben Knoble <ben.knoble@gmail.com>
Date
Sep 23, 2025, 17:56 UTC
Message-ID
<CALnO6CBLyVsMKuQhN3Rf+t0C1boHuumocahKE1vZ9U+7UbURRA@mail.gmail.com>
In-Reply-To
<pull.1964.v3.git.1758649472.gitgitgadget@gmail.com>

On Tue, Sep 23, 2025 at 1:44 PM Julia Evans via GitGitGadget <gitgitgadget@gmail.com> wrote:

Show 179 quoted lines
>
> I surveyed 16 Git users about the git push man page. Here's a rewrite of the
> DESCRIPTION section and the definition of <refspec> based on the feedback.
> The goal is to clarify it while communicating the same information. The most
> common piece of feedback was that folks didn't understand what the term
> "ref" means. Most of the users who said they did not understand the term
> "ref" have been using Git for 10+ years.
>
> changes in v2:
>
>  * The biggest change is to add a new UPSTREAM BRANCHES section to explain
>    what an upstream is
>  * Drop the "refspec" changes from this patch series, I've made revisions to
>    them based on the comments here but I felt like this was getting too big.
>  * Added some backticks `` that I'd missed, from Ben's review
>  * From Junio's review, "The current branch must have a configured upstream
>    with the same name, so this will fail when pushing a new branch" was not
>    true, so replace it with a less detailed but hopefully true statement.
>    After a very long conversation with Ben I realized that actually
>    push.default=simple's behaviour is not really that simple (perhaps I
>    should think of it as more "safe" than "simple", since "current" seems
>    simpler), so it's more realistic to refer any questions to the
>    CONFIGURATION section which describes the behaviour in more detail.
>  * Rewrite all the commits to explain the problem they're trying to solve &
>    thinking behind them in more detail. Let me know if I added too much /
>    not enough detail.
>
> changes in v3:
>
>  * mention that git push also needs to send data in addition to updating the
>    branch, from Junio's review
>  * fix a newline, from Junio's review
>  * un-rename urls-remotes.adoc, from Junio's review
>  * mention pushRemote and git checkout in the UPSTREAM BRANCHES section and
>    be clearer about what's meant by "the relationship between the current
>    branch and the upstream", from Junio's review
>  * fix AsciiDoc formatting issue, from Junio's review
>
> Julia Evans (4):
>   doc: git-push: clarify intro
>   doc: add an UPSTREAM BRANCHES section to pull/push/fetch
>   doc: git-push: clarify "where to push"
>   doc: git-push: clarify "what to push"
>
>  Documentation/git-push.adoc     | 43 +++++++++++++++++---------------
>  Documentation/urls-remotes.adoc | 44 ++++++++++++++++++++++++++++++---
>  2 files changed, 64 insertions(+), 23 deletions(-)
>
>
> base-commit: c44beea485f0f2feaf460e2ac87fdd5608d63cf0
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1964%2Fjvns%2Fclarify-push-v3
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1964/jvns/clarify-push-v3
> Pull-Request: https://github.com/gitgitgadget/git/pull/1964
>
> Range-diff vs v2:
>
>  1:  270edd2b00 ! 1:  2870c77e80 doc: git-push: clarify intro
>      @@ Documentation/git-push.adoc: SYNOPSIS
>       -every time you push into it, by setting up 'hooks' there.  See
>       -documentation for linkgit:git-receive-pack[1].
>       +Updates one or more branches, tags, or other references in a remote
>      -+repository from your local repository.
>      ++repository from your local repository, and sends all necessary data
>      ++that isn't already on the remote.
>
>        When the command line does not specify where to push with the
>        `<repository>` argument, `branch.*.remote` configuration for the
>      @@ Documentation/git-push.adoc: corresponding upstream branch, but as a safety meas
>       +You can make interesting things happen to a repository
>       +every time you push into it, by setting up 'hooks' there.  See
>       +documentation for linkgit:git-receive-pack[1].
>      ++
>
>        OPTIONS[[OPTIONS]]
>        ------------------
>  2:  0ec629d403 ! 2:  3ecfb5c3a6 doc: add an UPSTREAM BRANCHES section to pull/push/fetch
>      @@ Commit message
>
>           Signed-off-by: Julia Evans <julia@jvns.ca>
>
>      - ## Documentation/git-fetch.adoc ##
>      -@@ Documentation/git-fetch.adoc: include::pull-fetch-param.adoc[]
>      -  Read refspecs, one per line, from stdin in addition to those provided
>      -  as arguments. The "tag <name>" format is not supported.
>      -
>      --include::urls-remotes.adoc[]
>      -+include::urls-remotes-upstreams.adoc[]
>      -
>      -
>      - CONFIGURED REMOTE-TRACKING BRANCHES[[CRTB]]
>      -
>      - ## Documentation/git-pull.adoc ##
>      -@@ Documentation/git-pull.adoc: include::fetch-options.adoc[]
>      -
>      - include::pull-fetch-param.adoc[]
>      -
>      --include::urls-remotes.adoc[]
>      -+include::urls-remotes-upstreams.adoc[]
>      -
>      - include::merge-strategies.adoc[]
>      -
>      -
>      - ## Documentation/git-push.adoc ##
>      -@@ Documentation/git-push.adoc: further recursion will occur. In this case, "only" is treated as "on-demand".
>      - --ipv6::
>      -  Use IPv6 addresses only, ignoring IPv4 addresses.
>      -
>      --include::urls-remotes.adoc[]
>      -+include::urls-remotes-upstreams.adoc[]
>      -
>      - OUTPUT
>      - ------
>      -
>      - ## Documentation/urls-remotes.adoc => Documentation/urls-remotes-upstreams.adoc ##
>      -@@ Documentation/urls-remotes-upstreams.adoc: git push uses:
>      + ## Documentation/urls-remotes.adoc ##
>      +@@ Documentation/urls-remotes.adoc: git push uses:
>         HEAD:refs/heads/<head>
>        ------------
>
>      @@ Documentation/urls-remotes-upstreams.adoc: git push uses:
>       +Git defaults to using the upstream branch for remote operations, for example:
>       +
>       +* It's the default for `git pull` or `git fetch` with no arguments
>      -+* It's sometimes the default for `git push` with no arguments. See the
>      -+  `push.default` section of linkgit:git-config[1] for the details.
>      -+* `git status` and `git branch -v` will show the
>      -+  relationship between the current branch and the upstream,
>      -+  for example "Your branch is up to date with origin/main"
>      ++* It's the default for `git push` with no arguments, with some exceptions.
>      ++  For example, you can use the `branch.<name>.pushRemote` option to push
>      ++  to a different remote than you pull from, and by default with
>      ++  `push.default=simple` the upstream branch you configure must have
>      ++  the same name.
>      ++* Various commands, including `git checkout` and `git status`, will
>      ++  show you how many commits have been added to your current branch and
>      ++  the upstream since you forked from it, for example "Your branch and
>      ++  'origin/main' have diverged, and have 2 and 3 different commits each
>      ++  respectively"
>       +
>       +The upstream is stored in `.git/config`, in the "remote" and "merge"
>       +fields. For example, if `main`'s upstream is `origin/main`:
>       +
>      -+```
>      -+[branch "main"]
>      -+   remote = origin
>      -+   merge = refs/heads/main
>      -+```
>      ++ [branch "main"]
>      ++    remote = origin
>      ++    merge = refs/heads/main
>       +
>       +You can set an upstream branch explicitly with
>       +`git push --set-upstream <remote> <branch>` or `git branch --track`,
>  3:  374740c678 ! 3:  bfd6072983 doc: git-push: clarify "where to push"
>      @@ Commit message
>           doc: git-push: clarify "where to push"
>
>           Be clearer about what we're describing ("which repository" instead of
>      -    "what to push"), and start with a positive "try X, then Y, then Z"
>      +    "where to push"), and start with a positive "try X, then Y, then Z"
>           instead of a negative ("if X is not specified..").
>
>           Signed-off-by: Julia Evans <julia@jvns.ca>
>
>        ## Documentation/git-push.adoc ##
>      -@@ Documentation/git-push.adoc: DESCRIPTION
>      - Updates one or more branches, tags, or other references in a remote
>      - repository from your local repository.
>      +@@ Documentation/git-push.adoc: Updates one or more branches, tags, or other references in a remote
>      + repository from your local repository, and sends all necessary data
>      + that isn't already on the remote.
>
>       -When the command line does not specify where to push with the
>       -`<repository>` argument, `branch.*.remote` configuration for the
>  4:  59732f1e47 = 4:  be6453d010 doc: git-push: clarify "what to push"
>
> --
> gitgitgadget
Range-diff looks good to me. Thanks Julia!
-- 
D. Ben Knoble
Previous: D. Ben KnobleNext: Julia Evans via GitGitGadget
Message 60 of 87 in “doc: git-push: clarify DESCRIPTION section & refspec definition”
  1. 0/4 doc: git-push: clarify DESCRIPTION section & refspec definitionJulia Evans via GitGitGadget, Aug 26, 2025
  2. 1/4 doc: git-push: update introJulia Evans via GitGitGadget, Aug 26, 2025
  3. D. Ben KnobleAug 28, 2025
  4. Junio C HamanoAug 28, 2025
  5. Kristoffer HaugsbakkAug 29, 2025
  6. Julia EvansAug 28, 2025
  7. D. Ben KnobleAug 28, 2025
  8. 2/4 doc: git-push: clarify "where to push"Julia Evans via GitGitGadget, Aug 26, 2025
  9. Junio C HamanoAug 27, 2025
  10. 3/4 doc: git-push: clarify "what to push"Julia Evans via GitGitGadget, Aug 26, 2025
  11. Junio C HamanoAug 26, 2025
  12. Julia EvansAug 27, 2025
  13. D. Ben KnobleAug 28, 2025
  14. 4/4 doc: git-push: rewrite refspec specificationJulia Evans via GitGitGadget, Aug 26, 2025
  15. Junio C HamanoAug 26, 2025
  16. Julia EvansAug 27, 2025
  17. D. Ben KnobleAug 28, 2025
  18. 0/4 doc: git-push: clarify DESCRIPTION section & refspec definitionJulia Evans via GitGitGadget, Sep 12, 2025
  19. 1/4 doc: git-push: clarify introJulia Evans via GitGitGadget, Sep 12, 2025
  20. Junio C HamanoSep 12, 2025
  21. Julia EvansSep 15, 2025
  22. Junio C HamanoSep 16, 2025
  23. Julia EvansSep 16, 2025
  24. Ben KnobleSep 16, 2025
  25. Junio C HamanoSep 16, 2025
  26. Junio C HamanoSep 17, 2025
  27. Julia EvansSep 18, 2025
  28. 2/4 doc: add an UPSTREAM BRANCHES section to pull/push/fetchJulia Evans via GitGitGadget, Sep 12, 2025
  29. Junio C HamanoSep 12, 2025
  30. Julia EvansSep 15, 2025
  31. Junio C HamanoSep 15, 2025
  32. Julia EvansSep 15, 2025
  33. Junio C HamanoSep 16, 2025
  34. Junio C HamanoSep 16, 2025
  35. Junio C HamanoSep 16, 2025
  36. Julia EvansSep 18, 2025
  37. 3/4 doc: git-push: clarify "where to push"Julia Evans via GitGitGadget, Sep 12, 2025
  38. Junio C HamanoSep 12, 2025
  39. Junio C HamanoSep 12, 2025
  40. Julia EvansSep 15, 2025
  41. 4/4 doc: git-push: clarify "what to push"Julia Evans via GitGitGadget, Sep 12, 2025
  42. 0/4 doc: git-push: clarify DESCRIPTION sectionJulia Evans via GitGitGadget, Sep 23, 2025
  43. 1/4 doc: git-push: clarify introJulia Evans via GitGitGadget, Sep 23, 2025
  44. 2/4 doc: add an UPSTREAM BRANCHES section to pull/push/fetchJulia Evans via GitGitGadget, Sep 23, 2025
  45. Junio C HamanoSep 24, 2025
  46. Julia EvansSep 30, 2025
  47. 3/4 doc: git-push: clarify "where to push"Julia Evans via GitGitGadget, Sep 23, 2025
  48. 4/4 doc: git-push: clarify "what to push"Julia Evans via GitGitGadget, Sep 23, 2025
  49. Junio C HamanoSep 24, 2025
  50. Julia EvansSep 25, 2025
  51. Junio C HamanoSep 25, 2025
  52. Julia EvansSep 25, 2025
  53. Junio C HamanoSep 26, 2025
  54. Junio C HamanoSep 26, 2025
  55. Julia EvansSep 26, 2025
  56. Junio C HamanoSep 26, 2025
  57. Julia EvansSep 26, 2025
  58. Junio C HamanoSep 26, 2025
  59. D. Ben KnobleSep 28, 2025
  60. D. Ben KnobleSep 23, 2025
  61. 0/5 doc: git-push: clarify DESCRIPTION sectionJulia Evans via GitGitGadget, Sep 30, 2025
  62. 1/5 doc: git-push: clarify introJulia Evans via GitGitGadget, Sep 30, 2025
  63. 2/5 doc: add an UPSTREAM BRANCHES section to pull/push/fetchJulia Evans via GitGitGadget, Sep 30, 2025
  64. Junio C HamanoSep 30, 2025
  65. Julia EvansOct 3, 2025
  66. Junio C HamanoOct 3, 2025
  67. Jean-Noël AVILAOct 1, 2025
  68. Julia EvansOct 3, 2025
  69. 3/5 doc: git-push: clarify "where to push"Julia Evans via GitGitGadget, Sep 30, 2025
  70. 4/5 doc: git-push: clarify "what to push"Julia Evans via GitGitGadget, Sep 30, 2025
  71. Junio C HamanoSep 30, 2025
  72. Jean-Noël AVILAOct 1, 2025
  73. 5/5 doc: git-push: Add explanation of `git push origin main`Julia Evans via GitGitGadget, Sep 30, 2025
  74. D. Ben KnobleOct 1, 2025
  75. Julia EvansOct 3, 2025
  76. D. Ben KnobleOct 1, 2025
  77. 0/5 doc: git-push: clarify DESCRIPTION sectionJulia Evans via GitGitGadget, Oct 6, 2025
  78. 1/5 doc: git-push: clarify introJulia Evans via GitGitGadget, Oct 6, 2025
  79. 2/5 doc: add an UPSTREAM BRANCHES section to pull/push/fetchJulia Evans via GitGitGadget, Oct 6, 2025
  80. Kristoffer HaugsbakkOct 7, 2025
  81. Julia EvansOct 7, 2025
  82. D. Ben KnobleOct 7, 2025
  83. 3/5 doc: git-push: clarify "where to push"Julia Evans via GitGitGadget, Oct 6, 2025
  84. 4/5 doc: git-push: clarify "what to push"Julia Evans via GitGitGadget, Oct 6, 2025
  85. 5/5 doc: git-push: Add explanation of `git push origin main`Julia Evans via GitGitGadget, Oct 6, 2025
  86. D. Ben KnobleOct 6, 2025
  87. Junio C HamanoOct 6, 2025

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.