2012-02-19 18 views
6

El otro día, actualicé tiny_mce en un proyecto controlado por la versión con git. En ese momento, hice una rama git para el cambio y la fusioné para masterizar y eliminar la rama. Todo funcionó bien.Comportamiento extraño de git

Además, cambié el repositorio remoto a otro servidor y cambié mi .git/config. Pero descubrí que cometí un error como el siguiente.

[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 

Debe ser remoto = new_repo. Lo corregí más tarde y pareció funcionar bien.

Pero después de eso, si hago "estado de git", los archivos tiny_mce antiguos anularon el nuevo y están en la lista modificada pero no confirmados. Así que tengo que "git reset --hard HEAD". Eso sucede en otra copia de mi proyecto (actualizado a través de git) también. Pero no puedo reproducirlo. Parece suceder al azar. (O simplemente no puedo encontrar el patrón todavía)

¿Qué está pasando y cómo puedo solucionarlo?

Aquí está mi "una rama git":

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

actualizaciones y correcciones:

Resultó que la gema tiny_mce que mi solicitud rieles utiliza copias del viejo tiny_mce y sobrescribe el uno nuevo cada vez Ejecuto "rake some_task". Actualicé la joya tiny_mce.

+0

De alguna manera rompe su directorio de trabajo todo el tiempo. Tal vez se deba a referencias antiguas (¡recuerda que la sucursal de git checkout también puede buscar sucursales remotas!). ¿Puedes describir la salida de git branch -a command? –

+0

@AlexandrPriymak Edité mi pregunta para agregar "git branch -a". Gracias. –

+0

¿Has eliminado la rama principal local últimamente y luego simplemente 'git checkout master'? –

Respuesta

1
  1. El remotes/old_repo/master es el resultado de su cambio de nombre manual. En el futuro, prefiera git remote rename, o simplemente git remote set-url para actualizar sus controles remotos, y limpiará todo este tipo de cosas para usted.

    Limpiar después del hecho es un dolor; Se supone que git remote prune se ocupa de estos problemas, pero se niega a hacerlo si el control remoto se ha perdido. git branch -dr old_repo/master?

  2. git reset --hard HEAD hará muy poco si su HEAD es incorrecto.

    Inspeccione con git symbolic-ref HEAD, o simplemente cat .git/HEAD, o, mejor aún, ejecute git branch -avv. Estos le dirán a dónde apunta su HEAD.

    Probablemente esté apuntando a old_repo/master en lugar de new_repo/master? Si es así, puede (suponiendo que sepa lo que reset --hard hace a sus cambios no confirmados), git reset --hard new_repo/master, y nunca más hable de esto.

+0

¿Tomo alguno de los dos o ambos? De todos modos, "git branch -avv" es actualmente así.coro 3a57351 override tiny_mce * master 9c313f3 [ps_git/master] Eliminar a.txt controles remotos/codepremise/master 974b657 Actualizar tiny_mce controles remotos/ps_git/master 9c313f3 Eliminar a.txt –