Thread (10 messages) flat view 10 messages, 3 authors, 2016-06-15

Re: Master and origin/master diverged

From: Neal Kreitzinger <hidden>
Date: 2016-06-15 22:54:09

On 6/22/2012 3:18 PM, Hilco Wijbenga wrote:
On 22 June 2012 12:01, Neal Kreitzinger [off-list ref] wrote:
quoted
On 6/22/2012 12:53 PM, Hilco Wijbenga wrote:
quoted
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:
quoted
(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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help