2012-02-19 30 views
6

L'altro giorno, ho aggiornato tiny_mce in un progetto che è controllato dalla versione con git. A quel tempo, ho creato un ramo git per la modifica e l'ho unito al master e cancellato il ramo. Tutto ha funzionato bene.Comportamento strano di git

Inoltre, ho cambiato il repository remoto su un altro server e ho cambiato il mio .git/config. Ma ho scoperto che ho fatto un errore come il seguente.

[remote "new_repo"] 
    url = ssh://[email protected]/~/path/to/myproject.git 
    fetch = +refs/heads/*:refs/remotes/new_repo/* 
[branch "master"] 
    remote = old_repo <= WRONG 
    merge = refs/heads/master 

Dovrebbe essere remoto = new_repo. L'ho corretto più tardi e sembrava funzionare bene.

Ma dopo, se faccio "git status", i vecchi file tiny_mce sovrascrivono quello nuovo e sono nella lista modificata ma non impegnati. Quindi devo "git resettare --hard HEAD". Succede anche su un'altra copia del mio progetto (aggiornata via git). Ma non riesco a riprodurlo. Sembra casualmente (o non riesco ancora a trovare il modello)

Cosa sta succedendo e come posso risolverlo?

Ecco la mia "-a git branch":

choir 
* master 
remotes/old_repo/master 
remotes/new_repo/master 

Aggiornamenti e correzioni:

Si è scoperto che tiny_mce gioiello che la mia applicazione Rails usa copia il vecchio tiny_mce e sovrascrive quello nuovo ogni volta Corro "rake some_task". Ho aggiornato la gemma tiny_mce.

+0

In qualche modo si interrompe la directory di lavoro tutto il tempo. Forse è dovuto a vecchi riferimenti (ricorda che il ramo di git checkout può anche controllare i branch remoti!). Puoi descrivere l'output del comando git branch -a? –

+0

@AlexandrPriymak Ho modificato la mia domanda per aggiungere "git branch -a". Grazie. –

+0

Hai rimosso il ramo principale locale ultimamente e poi solo "git checkout master"? –

risposta

1
  1. Il remotes/old_repo/master è il risultato della vostra rename manuale. In futuro, preferisci git remote rename o anche solo git remote set-url per aggiornare i tuoi telecomandi e pulirà tutto questo genere di cose per te.

    Pulizia dopo che il fatto è un dolore; git remote prune si suppone che si occupi di questi problemi, ma si rifiuta di farlo se il telecomando è scomparso. git branch -dr old_repo/master?

  2. git reset --hard HEAD farà molto poco se il tuo HEAD è sbagliato.

    Ispezionalo con git symbolic-ref HEAD o solo cat .git/HEAD o, ancora meglio, esegui git branch -avv. Questi ti diranno dove punta il tuo HEAD.

    Probabilmente punta a old_repo/master invece di new_repo/master? In tal caso, puoi (presumendo che tu sappia che cosa fa reset --hard alle tue modifiche non salvate), git reset --hard new_repo/master, e non parlare mai più di questo.

+0

Prendo uno dei due o entrambi? Ad ogni modo, "git branch -avv" è attualmente in questo modo.choir 3a57351 override tiny_mce * master 9c313f3 [ps_git/master] Rimuovi a.txt telecomandi/codepremise/master 974b657 Aggiorna tiny_mce remotes/ps_git/master 9c313f3 Rimuovi a.txt –