Re: Master and origin/master diverged

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 22 June 2012 16:47, Neal Kreitzinger <nkreitzinger@xxxxxxxxx> wrote:
> On 6/22/2012 3:18 PM, Hilco Wijbenga wrote:
>>
>>
>> On 22 June 2012 12:01, Neal Kreitzinger <nkreitzinger@xxxxxxxxx> wrote:
>>>
>>> On 6/22/2012 12:53 PM, Hilco Wijbenga wrote:
>>>>
>>>>
>>>> One of my developers managed to push something that somehow "diverged"
>>>> origin/master from everyone else's local master.
>>>>
>>>> A --> B --> C --> D (everybody's local master)
>>>> |
>>>> \--> B' --> C' --> D' --> E (origin/master)
>>>>
>>>> (i.e., A is the commit where things diverged; everyone's local master
>>>> points to D but the new commit (E) that was pushed to origin/master
>>>> uses different SHA1s for B, C, and D)...
>>>>
>>>>
>>>> Now running git pull creates a merge commit joining D and E.
>>>>
>>>> ...Does anyone have any idea as to what might have happened? Perhaps if
>>>> I
>>>>
>>>> understand how this happened I might be able to prevent it from
>>>> happening again.
>>>>
>>> Some ways you can prevent it from happening again:
>>
>>
>>> (2) have your devs do git pull --ff-only
>>
>>
>> Is this something that can be set in git config? I looked but didn't
>> see anything obvious.
>
>
> OTTOMH, you could change the git fetch config for master and take away the
> leading '+' sign which would not allow non-fastforward fetches of master.
>  That in turn would prevent merging such a non-ff remote tracking branch of
> master into your branch master.
>
>
> Actually, I guess what I really want is
>>
>> something for git push, right?
>>
> Some ways to do it:
> (1) I think you could have rebase and commit hooks locally that prevent
> someone from rewriting history on master.  That in turn would prevent
> someone from pushing a rewritten history.

Yes, I have been thinking about that.

How does one create "portable" hooks? I have to deal with GNU/Linux,
OS X, and MS Windows. We all have Java installed so I first thought of
using JGit but I am not clear on how well JGit supports using it in a
hooks. Should I make Ruby a required part of the dev environment and
use Ruby hooks?

> (2) When merging topic branches to master use git merge --ff-only.  Then
> when you push it to remote master you know it's a fastforward and not a
> history rewrite.

Given how hard it is to teach devs to only push fast-forward merges, I
am not sure how well this would work.
--
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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]