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

Re: [SOLVED] `git fetch tag NAME' into mirror repo does not update HEAD, what to do?

From: Brian Foster <hidden>
Date: 2016-06-15 22:49:18

On Thursday 12 August 2010 14:32:41 Tomas Carnecky wrote:
On 8/12/10 2:16 PM, Brian Foster wrote:
quoted
[ ... ]  This _does_ work:

    git reset --soft FETCH_HEAD
[ ... ] 
 Given that git-reset(1)'s purpose is to change the branch's
 head (or to change HEAD as I've been incorrectly describing
 it), that does make sense.
I expected git checkout to work even in a bare repo - as you can
see I don't work that often inside bare repos :).
 <<<giggles>>>  No problem!  (I don't either, this situation was
 unexpected, but as SLAVE lagging behind ORIG is anticipated as
 being the usual case, we need to understand it.)
You should use update-ref instead of reset. The problem with reset is
that it changes the branch and not HEAD. Say initially your mirror had
HEAD as symref pointing to refs/heads/master.
 Correct, it does.
                                              When you run reset --soft
v2 your master branch will now point to the same commit as the tag v2
(and HEAD will be still pointing to refs/heads/master).
 Correct, that is what happens.  It also looks Ok to me,
 nor have any tests hit any snags.  It also happens to
 match how we (eventually) manually repaired SLAVE.
                                                        When you use
'git update-ref --no-deref HEAD v2' it will modify HEAD
 NO, it gets an error (following is from a modified version
 of my previously-posted script):
────────────────────────────────────────────────────────
 ...
+ cd ../SLAVE.git                                           
+ git fetch --verbose origin tag v2                         
 ...
From /work/tmp/git/ORIG                      
 * [new tag]         v2         -> v2        
+ git update-ref --no-deref HEAD v2          
error: Trying to write non-commit object 2bc324e6a68cb3704448c9f63ddc3bc0260c0b48 to branch HEAD                                                                                
fatal: Cannot update the ref 'HEAD'.                                                    
$ 
────────────────────────────────────────────────────────

 Using ‘git update-ref --no-deref HEAD FETCH_HEAD’ does
 not error, and, as you say (below), does seem to give
 me a detached head.
'git update-ref --no-deref HEAD v2' it will modify HEAD directly and
have it point directly to the same commit as v2 (also called detached HEAD).
 I do_not_ want a detached head!  This has perhaps been
 confused by my improperly saying “update HEAD” when I
 meant “update the master branch”.  If you look back at
 my originally-posted diagrams, it's a reasonable guess
 I don't want a detached head.  Having HEAD continue to
 be a symref to refs/heads/master (which, in this case,
 is the same commit as v2) is correct.

 Thanks for your help, advice, and hints.
cheers!
	-blf-
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help