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