remote - ¿Cómo puedo encontrar la ubicación de origen/maestro en git y cómo puedo cambiarlo?
git push origin master (13)
Soy un novato de Git. Recientemente moví un proyecto de Rails de Subversion a Git. Seguí el tutorial aquí: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
También estoy usando unfuddle.com para almacenar mi código. Realizo cambios en mi computadora portátil Mac en el tren a / desde el trabajo y luego los empujo a desajustar cuando tengo una conexión de red con el siguiente comando:
git push unfuddle master
Utilizo Capistrano para implementaciones y obtengo el código del repositorio de unfuddle usando la rama maestra.
Últimamente he notado el siguiente mensaje cuando ejecuto "git status" en mi computadora portátil:
# On branch master
# Your branch is ahead of ''origin/master'' by 11 commits.
#
nothing to commit (working directory clean)
Y estoy confundido en cuanto a por qué. Pensé que mi computadora portátil era el origen ... pero no sé si lo que está causando que aparezca el mensaje es el hecho de que originalmente saqué de Subversion o presioné a Unfuddle. Cómo puedo:
- Averigua dónde Git piensa que ''origen / maestro'' es?
- Si está en otro lugar, ¿cómo convierto mi computadora portátil en el ''origen / maestro''?
- Consigue que este mensaje se vaya. Me hace pensar que Git no está contento con algo.
Mi mac está ejecutando Git versión 1.6.0.1.
Cuando ejecuto git remote show origin
como sugiere dbr, obtengo lo siguiente:
~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: ''/Users/brian/Projects/GeekFor/gf/.git'': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
Cuando ejecuto git remote -v
como lo sugiere Aristóteles Pagaltzis, obtengo lo siguiente:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle [email protected]:spilth/geekfor.git
Ahora, curiosamente, estoy trabajando en mi proyecto en el directorio geekfor
pero dice que mi origen es mi máquina local en el directorio gf
. Creo que gf
fue el directorio temporal que usé al convertir mi proyecto de Subversion a Git y, probablemente, desde donde empecé a deshacerme de él. Entonces creo que revisé una copia nueva de unfuddle al directorio geekfor
.
Así que parece que debería seguir el consejo de dbr y hacer:
git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git
Pensé que mi portátil era el origen ...
Eso es algo sin sentido: el origin
refiere al repositorio remoto predeterminado, el que usualmente obtiene / extrae de los cambios de otras personas.
Cómo puedo:
git remote -v
te mostrará quéorigin
es;origin/master
es su "marcador" para el último estado conocido de la ramamaster
del repositorio deorigin
, y su propiomaster
es una rama de seguimiento paraorigin/master
. Esto es todo lo que debería ser .Usted no Al menos no tiene sentido que un repositorio sea el repositorio remoto predeterminado para sí mismo.
No lo es Simplemente le indica que ha realizado tantos y tantos confirmaciones locales que no están en el repositorio remoto (de acuerdo con el último estado conocido de ese repositorio).
1.
Averigüe dónde Git piensa que ''origin / master'' está usandogit-remote
git remote show origin
..que devolverá algo como ..
* remote origin
URL: [email protected]:~/something.git
Remote branch merged with ''git pull'' while on branch master
master
Tracked remote branch
master
Un remoto es básicamente un enlace a un repositorio remoto. Cuando tu lo hagas..
git remote add unfuddle [email protected]/myrepo.git
git push unfuddle
..git empujará los cambios a esa dirección que agregaste. Es como un marcador, para repositorios remotos.
Cuando ejecuta el git status
, comprueba si faltan confirmaciones en el control remoto (en comparación con su repositorio local), y si es así, por cuántas confirmaciones. Si presionas todos tus cambios a "origen", ambos estarán sincronizados, por lo que no recibirás ese mensaje.
2.
Si está en otro lugar, ¿cómo convierto mi computadora portátil en el ''origen / maestro''?
No tiene sentido hacer esto. Digamos que "origen" se renombra a "computadora portátil" - nunca querrás hacer una git push laptop
desde tu computadora portátil.
Si quieres eliminar el control remoto de origen, lo haces ..
git remote rm origin
Esto no eliminará nada (en términos de contenido de archivo / revisiones-historial). Esto detendrá el mensaje "su sucursal está adelantada por ...", ya que ya no comparará su repositorio con el control remoto (¡porque se ha ido!)
Una cosa para recordar es que no hay nada especial sobre el origin
, es solo un nombre predeterminado que usa git.
Git usa origin
por defecto cuando haces cosas como git push
o git pull
. Por lo tanto, si tiene un control remoto que usa mucho (Unfuddle, en su caso), le recomendaría agregar unfuddle como "origen":
git remote rm origin
git remote add origin [email protected]:subdomain/abbreviation.git
o haga lo anterior en un comando usando set-url:
git remote set-url origin [email protected]:subdomain/abbreviation.git
Entonces puede simplemente hacer git push
o git pull
para actualizar, en lugar de git push unfuddle master
Es posible restablecer un compromiso específico antes de que se realicen sus propios compromisos.
$ git status
# On branch master
# Your branch is ahead of ''origin/master'' by 2 commits.
#
nothing to commit (working directory clean)
Use git log
para encontrar qué compromiso fue el que tenía antes de que ocurrieran los cambios locales.
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
Tome nota de las confirmaciones locales y reinicie directamente a la confirmación anterior:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
Estoy luchando con este problema y ninguna de las respuestas anteriores aborda la pregunta como la veo. He reducido el problema a sus aspectos básicos para ver si puedo aclarar mi problema.
Creo un nuevo repositorio (rep1), pongo un archivo en él y lo confirmo.
mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"
Creo un clon de rep1 y lo llamo rep2. Miro dentro de rep2 y veo que el archivo es correcto.
cd ~
git clone ~/rep1 rep2
cat ~/rep2/README
En rep1 hago un solo cambio en el archivo y lo confirmo. Luego, en rep1, creo un control remoto para apuntar a rep2 y presiono los cambios.
cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master
Ahora, cuando entro en rep2 y hago un ''estado de git'', me dicen que estoy por delante del origen.
# On branch master
# Your branch is ahead of ''origin/master'' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README
#
README en rep2 es como era originalmente, antes de la segunda confirmación. Las únicas modificaciones que he hecho son para rep1 y todo lo que quería hacer era empujarlas a rep2. ¿Qué es lo que no estoy agarrando?
Hace poco tuve este problema y pensé que era porque había eliminado algunos archivos que ya no necesitaba. El problema es que git no sabe que los archivos se han eliminado y ve que el servidor todavía lo tiene. (servidor = origen)
Entonces corri
git rm $(git ls-files --deleted)
Y luego corrió un commit y push.
Eso solucionó el problema.
Llegué a esta pregunta en busca de una explicación sobre lo que significa el mensaje "su sucursal está adelantada por ...", en el esquema general de git. No hubo respuesta a eso aquí, pero como esta pregunta actualmente aparece en la parte superior de Google cuando busca la frase "Su sucursal está delante de ''origen / maestro''", y desde entonces he descubierto lo que realmente significa el mensaje , Pensé en publicar la información aquí.
Entonces, siendo un git newbie, puedo ver que la respuesta que necesitaba era una respuesta claramente newbie. Específicamente, lo que significa la frase "su sucursal está por delante con ..." es que hay archivos que ha agregado y comprometido en su repositorio local, pero que nunca ha enviado al origen. La intención de este mensaje se confunde aún más por el hecho de que "git diff", al menos para mí, no mostró diferencias. No fue hasta que ejecuté "git diff origin / master" que me dijeron que había diferencias entre mi repositorio local y el maestro remoto.
Entonces, para ser claros:
"su rama está adelante por ..." => Debe empujar hacia el maestro remoto. Ejecute "git diff origin / master" para ver cuáles son las diferencias entre su repositorio local y el repositorio maestro remoto.
Espero que esto ayude a otros novatos.
(Además, reconozco que hay sutilezas de configuración que pueden invalidar parcialmente esta solución, como el hecho de que el maestro puede no ser realmente "remoto" y que "origen" es un nombre reconfigurable utilizado por la convención, etc. Pero los novatos sí lo hacen. No nos importa ese tipo de cosas. Queremos respuestas simples y directas. Podemos leer sobre las sutilezas más adelante, una vez que hayamos resuelto el problema acuciante.)
Conde
Me preguntaba lo mismo acerca de mi repo. En mi caso, tenía un control remoto antiguo al que ya no estaba presionando, así que tuve que retirarlo.
Obtener la lista de mandos a distancia:
git remote
Elimina el que no necesites.
git remote rm {insert remote to remove}
Te está esperando "empujar". Tratar:
$ git push
Tuve el problema "Tu sucursal está delante de ''origin / master'' por nn commit". cuando empujé a un repositorio remoto con:
git push ssh://[email protected]/yyy/zzz.git
Cuando encontré que mi dirección remota estaba en el archivo .git / FETCH_HEAD y usé:
git push
El problema desapareció.
Tuve un problema similar a este en el que mi directorio de trabajo estaba ahead of origin by X commits
pero el git pull
como resultado Everything up-to-date
. Logré arreglarlo siguiendo este consejo . Estoy publicando esto aquí en caso de que ayude a alguien más con un problema similar.
La solución básica es la siguiente:
$ git push {remote} {localbranch}:{remotebranch}
Donde las palabras entre corchetes deben reemplazarse por su nombre remoto, el nombre de su sucursal local y el nombre de su sucursal remota. p.ej
$ git push origin master:master
Yo también soy un git novato. Tuve el mismo problema con ''Tu sucursal está delante del origen / maestro por N mensajes'' confirmados. Hacer el ''git diff origin / master'' sugerido mostró algunas diferencias que no me interesaba mantener. Asi que ...
Como mi clon de git era para hosting, y quería una copia exacta del repositorio maestro, y no me importaba mantener ningún cambio local, decidí guardar todo mi repositorio y crear uno nuevo:
(en la máquina de alojamiento)
mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo
Por conveniencia, solía hacer cambios en el clon en mi máquina de alojamiento. No más. Haré esos cambios en el maestro, git commit allí y haré un git pull. Con suerte, esto debería mantener mi clon de git en la máquina de alojamiento en completa sincronización.
/ Nara
a veces hay una diferencia entre la versión local en caché del maestro de origen (origen / maestro) y el verdadero maestro de origen.
Si ejecuta git remote update
esto volverá a sincronizar el maestro de origen con el origen / maestro
Vea la respuesta aceptada a esta pregunta.
Diferencias entre git pull origin master y git pull origin / master
[Solución]
$ git push origin
Esto me lo resolvió. Lo que hizo, sincronizó mi maestro (en la computadora portátil) con el "origen" que está en el servidor remoto.