On Wednesday 2007 March 21 15:37, Junio C Hamano wrote: > I often hear from people who seems to like "fetch & merge", > instead of "pull & reset ORIG_HEAD", as a workflow to avoid > undesirable merging. This might largely be a matter of taste, > but from philosophical point of view, fetch & merge is a sign of > distrust (your default is not to merge, and you merge only when > you choose to), and pull & reset is the opposite (your default > is to merge, and after you inspect you may choose not to merge). > Tool support to encourage the former feels somewhat wrong. It's definitely not wrong - and I realise you aren't advocating removing fetch & merge; however I wanted to explain why fetch & merge isn't wrong. I almost never use pull; in fact, of the two work methods you mention, I can't see that git-pull would ever be the my regular use case (I wonder if I'm missing something and need enlightening?) Use case (1) A colleague and I work on the same project; with fundamentally the same code base. He commits to one branch and I commit to an other. I want to be able to see what he's doing, but definitely don't want to merge that branch. Regular git-fetch sorts that out. Occasionally, his branch stabilises to the point were we want to merge my changes in. I'm more familiar with both branches than him so it's better if I do the merge and resolve the conflicts. git-merge does that job. Strangely enough, I've also found that it's better to resolve some commits before the merge is done. Using "git-diff mybranch hisbranch" often shows changes that are going to conflict, but don't need to - this is usually things like "// comment this block out while I'm testing something else". Use case (2): I keep branches around for submission to git. Whenever they're ready to go I rebase them on to master resolve conflicts and email them in. That is git-fetch, git-rebase. I have never run git-pull on my git repository. Use case (3): I'm tracking an upstream project that uses svn; git-svn makes light work of keeping up to date with it and keeping a "git-svn" branch to track it. I keep my own local changes to it - never for submission upstream - in a separate branch; infrequently I merge the upstream branch into my own. Your favoured case misses out one significant step: * git-pull * Spend time resolving conflicts * git-reset ORIG_HEAD It's not a sign of distrust that I don't do git-pull; I trust git to do a fantastic job when that moment comes. However, it is a sign of laziness - why should I want to resolve conflicts just so they can be thrown away when I don't like them. Andy -- Dr Andy Parkins, M Eng (hons), MIET andyparkins@xxxxxxxxx - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html