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-