From: Felipe Contreras <felipe.contreras@gmail.com>
To: Richard Hansen <rhansen@bbn.com>,
Junio C Hamano <gitster@pobox.com>,
Marc Branchaud <marcnarc@xiplink.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: Pull is Mostly Evil
Date: Sat, 03 May 2014 04:26:05 -0500 [thread overview]
Message-ID: <5364b62d5fb7b_ac68dd30816@nysa.notmuch> (raw)
In-Reply-To: <5364A143.1060404@bbn.com>
Richard Hansen wrote:
> I think the fundamental difference is in the relationship between the
> local and the remote branch (which branch derives from the other).
> The relationship between the branches determines what the user wants
> from 'git pull'.
>
> In my experience 'git pull' is mostly (only?) used for the following
> three tasks:
I agree.
> 1. update a local branch to incorporate the latest upstream changes
>
> In this case, the local branch (master) is a derivative of the
> upstream branch (origin/master). The user wants all of the
> commits in the remote branch to be in the local branch. And the
> user would like the local changes, if any, to descend from the tip
> of the remote branch.
My current propsal of making `git pull` by default do --ff-only would
solve this. In addition I think by default 'master' should be merged to
'origin/master', if say --merge is given.
> For this case, 'git pull --ff-only' followed by 'git rebase -p'
> works well, as does 'git pull --rebase=preserve' if the user is
> comfortable rebasing without reviewing the incoming commits first.
I suppose you mean a `git rebase -p` if the `git pull --ff-only` failed.
This might be OK on most projects, but not all.
What happens after a `git pull --ff-only` fails should be totally
up to the user.
> 2. update a published feature branch with the latest changes from its
> parent branch
>
> In this case, the local branch (foo) is a derivative of the
> upstream branch (origin/foo) which is itself a derivative of
> another branch (origin/master). All commits in origin/master
> should be in origin/foo, and ideally all commits unique to
> origin/foo would descend from the tip of origin/master.
I don't understand why are you tainting the example with 'origin/foo',
'foo' and 'origin/master' are enough for this example. In fact, the
mention of 'origin/master' made it wrong: after the pull not all the
commits of origin/master would be in origin/foo, you need a push for
that. We have enough in our plate to taint this with yet another branch
and push.
For this case `git pull origin master` already work correctly for most
projects. We probably shouldn't change that.
> 3. integrate a more-or-less complete feature/fix back into the line
> of development it forked off of
>
> In this case the local branch is a primary line of development and
> the remote branch contains the derivative work. Think Linus
> pulling in contributions. Different situations will call for
> different ways to handle this case, but most will probably want
> some or all of:
>
> * rebase the remote commits onto local HEAD
No. Most people will merge the remote branch as it is. There's no reason
to rebase, specially if you are creating a merge commit.
> * merge into local HEAD so that the first parent (if a real merge
> and not a ff) is the previous version of the main line of
> development and the second parent is the derivative work
> * merge --no-ff so that:
> - the merge can serve as a cover letter (who reviewed it,
> which bug reports were fixed, where the changes came from,
> etc.)
> - the commits that compose the new topic are grouped together
> - the first-parent path represents a series of completed tasks
It is very rare that an integrator is even able to do a fast-forward
merge anyway. So being explicit about --no-ff might better, but it would
hardly make a difference. Either way, a good integrator would configure
pull.ff = false.
I'd say `git pull origin master` already works fine for this case.
--
Felipe Contreras
next prev parent reply other threads:[~2014-05-03 9:36 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-02 15:37 Pull is Mostly Evil Marc Branchaud
2014-05-02 15:45 ` David Kastrup
2014-05-02 16:05 ` Philip Oakley
2014-05-02 19:05 ` Felipe Contreras
2014-05-02 22:34 ` Philip Oakley
2014-05-02 22:53 ` Jonathan Nieder
2014-05-03 20:24 ` Philip Oakley
2014-05-02 23:23 ` Felipe Contreras
2014-05-03 11:24 ` Philip Oakley
2014-05-03 11:30 ` Felipe Contreras
2014-05-02 19:31 ` David Lang
2014-05-02 19:37 ` David Kastrup
2014-05-02 18:13 ` Junio C Hamano
2014-05-02 19:11 ` Felipe Contreras
2014-05-02 20:06 ` Junio C Hamano
2014-05-02 20:58 ` Felipe Contreras
2014-05-02 21:48 ` Jeff King
2014-05-02 21:55 ` Felipe Contreras
2014-05-02 22:36 ` Jeff King
2014-05-02 23:27 ` Felipe Contreras
2014-05-03 2:18 ` David Kastrup
2014-05-06 22:06 ` Junio C Hamano
2014-05-06 22:19 ` Felipe Contreras
2014-05-03 7:56 ` Richard Hansen
2014-05-03 8:17 ` David Kastrup
2014-05-03 9:04 ` Felipe Contreras
2014-05-03 9:56 ` David Kastrup
2014-05-04 4:30 ` David Lang
2014-05-04 4:38 ` Felipe Contreras
2014-05-04 6:13 ` David Kastrup
2014-05-04 6:50 ` James Denholm
2014-05-04 7:48 ` David Kastrup
2014-05-04 9:51 ` Felipe Contreras
2014-05-04 10:37 ` James Denholm
2014-05-04 11:02 ` David Kastrup
2014-05-03 9:26 ` Felipe Contreras [this message]
2014-05-03 22:09 ` Richard Hansen
2014-05-04 3:08 ` Felipe Contreras
2014-05-04 7:49 ` Richard Hansen
2014-05-04 10:17 ` Felipe Contreras
2014-05-04 19:09 ` Richard Hansen
2014-05-04 21:13 ` Felipe Contreras
2014-05-05 5:44 ` Richard Hansen
2014-05-05 5:47 ` Felipe Contreras
2014-05-07 22:37 ` Max Kirillov
2014-05-03 10:00 ` John Szakmeister
2014-05-05 15:39 ` Richard Hansen
2014-05-05 18:15 ` Felipe Contreras
2014-05-02 22:12 ` Philip Oakley
2014-05-09 19:49 ` Marc Branchaud
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5364b62d5fb7b_ac68dd30816@nysa.notmuch \
--to=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=marcnarc@xiplink.com \
--cc=rhansen@bbn.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).