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

Re: [PATCH 0/3] Reject non-ff pulls by default

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Sep 9, 2013, 22:59 UTC
Message-ID
<CAMP44s0rypiQtmQPAHA6QHvAE6HmOMmYKi1sTpze+dmifLumFw@mail.gmail.com>
In-Reply-To
<20130909201751.GA14437@sigill.intra.peff.net>
On Mon, Sep 9, 2013 at 3:17 PM, Jeff King <peff@peff.net> wrote:
Show 98 quoted lines
> On Sun, Sep 08, 2013 at 03:50:46AM -0400, Jeff King wrote:
>
>> > > If you are interested, I can ask the opinion of some of the GitHub
>> > > trainers. They see a lot of new users and have a sense of what kinds of
>> > > confusion come up most frequently, what kinds of workflows they tend to
>> > > see, etc. Their experience may be biased towards corporate-ish users,
>> > > though, because those are the people who pay for training.
>> >
>> > Ask. I'm sure they will tell you doing merges by mistake with 'git
>> > pull' is an issue.
>>
>> I've sent an email. I'll post the response when I get it.
>
> Here is what I sent them (I am leaving both my mail and theirs unedited
> to avoid any "telephone"-like confusion in trying to summarize):
>
>         Right now, running "git pull" will always create a merge, unless
>         the user has specifically configured it to perform a rebase.
>         Some people find this problematic, because the project may care
>         about the order of merges (e.g., so that --first-parent
>         traversals do the right thing), and some users may accidentally
>         do "backwards" merges from a main branch into a topic (either
>         because they are clueless, or because they simply forgot).
>
>         There is a proposal being considered to have "git pull" do
>         nothing by default, but instead ask the user to specify whether
>         to merge or rebase (with the option of setting a config value if
>         you want it to do one by default).
>
>         One concern I have is that new users may run across this
>         relatively early. For example, the first time they "git push"
>         and get a non-fast-forward because somebody else has already
>         pushed, git suggests to run "git pull". At which point they will
>         have to decide whether to merge or rebase. So what I'd like your
>         opinions on is:
>
>           1. Do new users have trouble with the concept of rebase vs
>              merge?  How would they handle this change of behavior?
>
>           2. Do new users have trouble with rebases in general? There
>              are some complications over doing a normal merge, but I
>              don't know how often they trip people up in practice.
>
> And the responses I got were:
>
>         1. New users definitely have trouble distinguishing between
>         rebase and merge. Even people who have been using Git for a
>         while on a basic level are sometimes confused by this.
>
>         2. Most people we teach—even the ones who have been using Git
>         for a while—don't know what a rebase is at all. They've heard of
>         it, but they don't get it. It takes careful explanation to get
>         the concept across and explain why it is not the same thing as a
>         merge.
>
>         Speaking for myself, about half of the time in the Foundations
>         class I'll explain `pull --rebase` and `branch.autosetuprebase`.
>         (Whether we get to it depends on class interest and ability.)
>         When we do address that topic, we always recommend that
>         rebase-on-pull is the right thing to do, since the merges Git
>         creates are just noise that makes history hard to work with in
>         the ways you have pointed out. (For smart classes, I like to
>         make the analogy of Git to a distributed database, and point out
>         how the merge on pull is just Git's mechanism for resolving
>         split-brain writes. I explain that those merges aren't a
>         deficiency in Git; they're just what has to happen by default.
>         The fact that Git handles split-brain writes so well by itself
>         is amazing.)
>
>         My input would be to continue to have `pull` merge by default.
>         Those merges aren't great, but new users won't have any idea how
>         to make a decision about them at that point. As it is, it just
>         works, and it works quite elegantly. Once you start to learn
>         some things, you can tune Git up to work even more elegantly by
>         rebasing, but having to understand that concept and make a
>         decision on your first (or second or third or twentieth) pull is
>         probably asking too much.
>
> and:
>
>         Just a few more elements to add:
>
>         * I have been teaching rebase and what it means in _some_ of my
>         Git Foundations classes as of late.  But "some" means there are
>         a majority that do not get it.
>
>         * These are the people that get "formal" training on Git.  What
>         about all the newbies?  They really won't have a foundation for
>         what these two "flavors" mean.
>
>         * The merge is very different from what Subversion presents as a
>         default.  That's a possible point in the "option's favor."
>
>         * In the end though, the "simplest thing that works" should be
>         the default without a choice.  To me, a choice implies knowledge
>         of the benefits of each option.  I would say that the majority
>         of our Git students do not, at the beginning of Git usage,
>         understand the difference.
Wall these concerns can be tackled with an error message that says:

"The pull was not fast-forward, please either merge or rebase. If unsure, run 'git pull --merge'."

-- 
Felipe Contreras
Previous: Jeff KingNext: John Keeping
Message 24 of 84 in “Reject non-ff pulls by default”
  1. 0/3 Reject non-ff pulls by defaultFelipe Contreras, Aug 31, 2013
  2. 1/3 merge: simplify ff-only optionFelipe Contreras, Aug 31, 2013
  3. 2/3 t: replace pulls with mergesFelipe Contreras, Aug 31, 2013
  4. 3/3 pull: reject non-ff pulls by defaultFelipe Contreras, Aug 31, 2013
  5. Junio C HamanoSep 3, 2013
  6. Felipe ContrerasSep 3, 2013
  7. Junio C HamanoSep 3, 2013
  8. Felipe ContrerasSep 3, 2013
  9. John KeepingSep 4, 2013
  10. Jeff KingSep 4, 2013
  11. John KeepingSep 4, 2013
  12. Felipe ContrerasSep 8, 2013
  13. Jeff KingSep 8, 2013
  14. Felipe ContrerasSep 8, 2013
  15. Jeff KingSep 8, 2013
  16. Felipe ContrerasSep 8, 2013
  17. Jeff KingSep 8, 2013
  18. Felipe ContrerasSep 8, 2013
  19. Jeff KingSep 8, 2013
  20. Felipe ContrerasSep 8, 2013
  21. Jeff KingSep 8, 2013
  22. Felipe ContrerasSep 8, 2013
  23. Jeff KingSep 9, 2013
  24. Felipe ContrerasSep 9, 2013
  25. John KeepingSep 8, 2013
  26. Jeff KingSep 9, 2013
  27. brian m. carlsonSep 8, 2013
  28. Felipe ContrerasSep 8, 2013
  29. brian m. carlsonSep 9, 2013
  30. Felipe ContrerasSep 9, 2013
  31. Felipe ContrerasSep 9, 2013
  32. brian m. carlsonSep 9, 2013
  33. Matthieu MoySep 9, 2013
  34. Junio C HamanoSep 9, 2013
  35. Jeff KingSep 9, 2013
  36. John KeepingSep 9, 2013
  37. Jeff KingSep 9, 2013
  38. John KeepingSep 9, 2013
  39. Richard HansenSep 9, 2013
  40. Matthieu MoySep 9, 2013
  41. Jeff KingSep 9, 2013
  42. Philip OakleySep 9, 2013
  43. Felipe ContrerasSep 9, 2013
  44. John KeepingSep 10, 2013
  45. Matthieu MoySep 9, 2013
  46. Junio C HamanoSep 10, 2013
  47. Felipe ContrerasSep 9, 2013
  48. Matthieu MoySep 10, 2013
  49. Felipe ContrerasSep 11, 2013
  50. Matthieu MoySep 11, 2013
  51. Felipe ContrerasSep 13, 2013
  52. Junio C HamanoSep 4, 2013
  53. Junio C HamanoSep 4, 2013
  54. Philip OakleySep 4, 2013
  55. Junio C HamanoSep 4, 2013
  56. John KeepingSep 5, 2013
  57. Junio C HamanoSep 5, 2013
  58. John KeepingSep 5, 2013
  59. Jonathan NiederSep 6, 2013
  60. Junio C HamanoSep 6, 2013
  61. John KeepingSep 7, 2013
  62. Felipe ContrerasSep 8, 2013
  63. Felipe ContrerasSep 8, 2013
  64. Philip OakleySep 8, 2013
  65. Felipe ContrerasSep 8, 2013
  66. Philip OakleySep 8, 2013
  67. Felipe ContrerasSep 8, 2013
  68. Philip OakleySep 8, 2013
  69. Philip OakleySep 8, 2013
  70. John SzakmeisterSep 5, 2013
  71. John KeepingSep 5, 2013
  72. John SzakmeisterSep 5, 2013
  73. Richard HansenSep 5, 2013
  74. Philip OakleySep 5, 2013
  75. Junio C HamanoSep 5, 2013
  76. Junio C HamanoSep 5, 2013
  77. Felipe ContrerasSep 8, 2013
  78. Richard HansenSep 8, 2013
  79. Junio C HamanoSep 8, 2013
  80. Richard HansenSep 8, 2013
  81. Philip OakleySep 8, 2013
  82. Felipe ContrerasSep 8, 2013
  83. Ramkumar RamachandraSep 8, 2013
  84. Greg TroxelSep 5, 2013

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.