Re: disallowing push to currently checked-out branch

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

 



Hi,

On Mon, 16 Feb 2009, Sergio Callegari wrote:

> Johannes Schindelin wrote:
> > Wrong.  It cries out loud when you detach, not when you commit to a 
> > detached HEAD.  For good reason: Already at the second commit it would 
> > stop being funny.
>
> Right, I was wrong in expecting complaints. But... if it cried out at 
> the first commit, for many people there would probably not be a second. 

What you are suggesting, though, is that the _pusher_ detaches the HEAD.  
So the _local_ user will never know.

> Btw, I am ignorant on this: is there some case where one wants and has 
> reasons to commit to a detached head before making a temporary branch on 
> it?

Yes.  When you try fixups on a commit you just jumped to, for example.  Or 
when bisecting.

I often use the detached HEAD as kind of a stash during a bisect.  I try 
to fix it there, at the bad commit, and then cherry-pick HEAD@{1} into 
the branch after resetting the bisect.

> > > Furthermore, one could do just a bit more than detaching, namely 
> > > store the fact that head got detached and the name of the branch 
> > > where the head was. With this, when the unconscious user types git 
> > > status or git commit the system could alert him that head got 
> > > detached because someone updated the branch behind his shoulders 
> > > from remote...
> >
> > And of course, you need a way to show the user all the updates the branch
> > went through while the HEAD was detached, so that the user has a chance of
> > understanding what happened in the meantime.
> >
> > So much additional work, just to fix up the shortcomings of the 
> > 'detach' paradigm?  I take it as a clear mark of a not-so-elegant 
> > design.
>   
> Well not that much additional work...
> 
> when you push to the checked out branch, head gets detached and branch name
> (say /ref/heads/master) gets stored (say in .git/pre_push_branch).
> when you run status or commit, you realize that there is a pre_push_branch and
> you give the warning, saying what the pre_push_branch was.

Of course, you assume there that it was only one push between detaching 
the HEAD and inspecting the mess.

> Now, since before the push you were at the tip of that branch, to know 
> what happened it should be enough to ask the log (or the diff) from 
> pre_push_branch to HEAD. At the first user command that moves HEAD, 
> pre_push_branch should get deleted.

And you call that not much work?

> Btw, what does happen now if you delete the branch the remote worktree 
> is on?

See the related discussion of receive.denyDeleteCurrent.

Ciao,
Dscho

--
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]

  Powered by Linux