On Monday, 3 September 2012 21:53:28 UTC+1, Mauro Sanna wrote:
>
> On 3 September 2012 19:45, Antony Male <anton...@gmail.com <javascript:>> 
> wrote: 
> > On Monday, 3 September 2012 18:33:03 UTC+1, Mauro Sanna wrote: 
> >> 
> >> On 3 September 2012 18:56, Antony Male <anton...@gmail.com> wrote: 
> >> > On Monday, 3 September 2012 17:32:46 UTC+1, Mauro Sanna wrote: 
> >> >> 
> >> >> On 3 September 2012 18:13, Antony Male <anton...@gmail.com> wrote: 
> >> >> > On Monday, 3 September 2012 12:19:11 UTC+1, Mauro Sanna wrote: 
> >> >> >> 
> >> >> >> Then I do a git checkout master, git merge devel and push and all 
> >> >> >> done. 
> >> >> >> I always have done this but now, in a new application, when I do 
> git 
> >> >> >> merge 
> >> >> >> devel into master it asks me for a commit message. 
> >> >> > 
> >> >> > 
> >> >> > In version 1.7.10, git started prompting for a commit message 
> after 
> >> >> > every 
> >> >> > merge. The rationale behind this is explained in Junio's (the 
> >> >> > maintainer's) 
> >> >> > blog post [1] 
> >> >> 
> >> >> Ok but, why it don't ask for a commit message when used in some 
> other 
> >> >> projects? 
> >> >> .git/config is the same. 
> >> >> Perhaps because I've set the repository using git before 1.7.10? 
> >> > 
> >> > 
> >> > Maybe in one project the merges you're doing are non-fast-forward (as 
> >> > you 
> >> > stated), whereas in the others they're fast-forward? Maybe there's a 
> >> > configuration difference? (I didn't think there was a config key to 
> >> > disable 
> >> > this behaviour, but it's worth a check). 
> >> 
> >> 
> >> Here the config for two of my projects. 
> >> The first is not fast-forward while in the second the merge is 
> >> fast-forward. 
> > 
> > 
> > There we go! Read up on the differences between fast-forward and 
> > non-fast-forward merges. [1] is a helpful resource. 
> > 
> > Now, as you can see, fast-forward merges don't involve an actual merge 
> > commit. No merge commit = no commit message. Which is why you're not 
> being 
> > prompted for a message for the fast-forward merge.n 
>
> Yes I know, but I want my merges to be fast-forward. 
> Because git configuration is the same for the two projects I don't 
> know why the merge for first project go fast-forward while the second 
> one not. 
> What's the differerence between the two configurations? There is no 
> difference, so why I have a merge with fast-forward and a merge with 
> no fast-forward?
>

 'git merge' will (by default) do a fast-forward merge if it can, otherwise 
it will do a recursive merge.

As shown by the PDF I linked to a few posts back, if you're merging develop 
into master (git checkout master; git merge develop), a fast-forward merge 
can happen if and only if develop is a direct descendant of master. That 
is, if the master branch contains only commits which are also contained by 
the develop branch. If master has commits which develop does not have, then 
a fast-forward merge cannot occur, and a recursive merge must be used 
instead.

Graphically: (Use a fixed-width font to view: I know google groups uses a 
variable-width font by default)

A fast-forward merge *can* occur:

        O--O--O 
       /      ^
O--O--O    develop
      ^
    master

which will result in:

            develop
               v
O--O--O--O--O--O
               ^
             master

A fast-forward merge *cannot* occur (as master contains commits which 
aren't present on develop):

           develop
              v
        O--O--O
       /
O--O--O--O
         ^
      master

where a recursive merge will result in (M being the merge commit):

           develop
              v
        O--O--O
       /       \
O--O--O--O------M
                ^
              master


If you're having trouble visualising your branch structure, use `gitk 
master develop` (if gitk is available), otherwise `git log --graph 
--oneline --decorate master develop`. You should see that, in the 
repository where fast-forward merges are occuring, there are no commits 
present on master which aren't also present on develop. In the other 
repository (where fast-forward merges are not occuring), you will see that 
there is at least one commit on master which is not also present on develop 
(you may have to look back a bit, to slightly before the first recursive 
merge occurred).

Hope that helps clarify the situation. If you're still not getting it, 
paste (or pastebin) the output of `git log --graph --oneline --decorate 
master develop`, and I can point out the critical difference.

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/git-users/-/oPwwwmapb70J.
To post to this group, send email to git-users@googlegroups.com.
To unsubscribe from this group, send email to 
git-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/git-users?hl=en.

Reply via email to