Re: Master and origin/master diverged
- From
- Neal Kreitzinger <nkreitzinger@gmail.com>
- Date
- Jun 22, 2012, 23:47 UTC
- Message-ID
- <4FE50411.8080800@gmail.com>
- In-Reply-To
- <CAE1pOi2MN_c76UBeRzdRbU8s+0LzYVoVcJ13V0di=HQobj+aDg@mail.gmail.com>
On 6/22/2012 3:18 PM, Hilco Wijbenga wrote:
Show 27 quoted lines
> > On 22 June 2012 12:01, Neal Kreitzinger <nkreitzinger@gmail.com> 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. (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.
v/r, neal