Domanda

Sono un principiante Git. Di recente ho spostato un progetto Rails da Subversion a Git. Ho seguito il tutorial qui: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

Sto anche usando unfuddle.com per memorizzare il mio codice. Apporto le modifiche sul mio laptop Mac sul treno da / per lavoro e poi le spingo per disarmarle quando ho una connessione di rete usando il seguente comando:

git push unfuddle master

Uso Capistrano per le distribuzioni e estraggo il codice dal repository di dislocamento usando il ramo master.

Ultimamente ho notato il seguente messaggio quando eseguo " git status " sul mio laptop:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

E sono confuso sul perché. Pensavo che il mio laptop fosse l'origine ... ma non so se o il fatto che originariamente mi sono trasferito da Subversion o che abbia spinto verso Unfuddle sia ciò che sta facendo apparire il messaggio. Come posso:

  1. Scopri dove Git pensa che sia 'origine / master'?
  2. Se è altrove, come posso trasformare il mio laptop in "origine / master"?
  3. Ricevi questo messaggio per andare via. Mi fa pensare che Git non sia contento di qualcosa.

Il mio mac esegue Git versione 1.6.0.1.


Quando eseguo git remote show origin come suggerito da dbr, ottengo quanto segue:

~/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

Quando eseguo git remote -v come suggerito da Aristotele Pagaltzis, ottengo quanto segue:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

Ora, cosa interessante, sto lavorando al mio progetto nella directory geekfor ma dice che la mia origine è il mio computer locale nella directory gf . Credo che gf sia stata la directory temporanea che ho usato durante la conversione del mio progetto da Subversion a Git e probabilmente da dove ho spinto per srotolarmi. Quindi credo di aver estratto una nuova copia da unfuddle alla directory geekfor .

Quindi sembra che dovrei seguire i consigli di dbr e fare:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
È stato utile?

Soluzione

  

1. Scopri dove Git pensa che 'origin / master' stia usando git-remoto

git remote show origin

.. che restituirà qualcosa come ..

* remote origin
  URL: me@remote.example.com:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

Un telecomando è fondamentalmente un collegamento a un repository remoto. Quando lo fai ..

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..git invierà le modifiche all'indirizzo che hai aggiunto. È come un segnalibro, per repository remoti.

Quando esegui git status , controlla se mancano commit del telecomando (rispetto al tuo repository locale) e, in tal caso, da quanti commit. Se invii tutte le modifiche a " origin " ;, entrambe saranno sincronizzate, quindi non riceverai quel messaggio.

  

2. Se è altrove, come posso trasformare il mio laptop in "origine / master"?

Non ha senso farlo. Dì "origine" viene rinominato in "laptop" - non vuoi mai fare git push laptop dal tuo laptop.

Se si desidera rimuovere il telecomando di origine, si fa ..

git remote rm origin

Questo non eliminerà nulla (in termini di contenuto del file / cronologia delle revisioni). Ciò interromperà il "tuo ramo è avanti di ..." messaggio, poiché non confronterà più il tuo repository con il telecomando (perché non c'è più!)

Una cosa da ricordare è che non c'è nulla di speciale in origin , è solo un nome predefinito che git usa.

Git usa origin per impostazione predefinita quando fai cose come git push o git pull . Quindi, se hai un telecomando che usi molto (Unfuddle, nel tuo caso), consiglierei di aggiungere unfuddle come " origin " ;:

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

o esegui quanto sopra in un comando usando set-url:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

Quindi puoi semplicemente fare git push o git pull per aggiornare, invece di git push unfuddle master

Altri suggerimenti

Sono arrivato a questa domanda cercando una spiegazione su ciò che il messaggio "il tuo ramo è in anticipo di ..." significa, nello schema generale di git. Non c'è stata risposta a questo qui, ma dal momento che questa domanda appare attualmente nella parte superiore di Google quando cerchi la frase " Il tuo ramo è in anticipo rispetto a "origin / master" " e da allora ho capito quale sia il messaggio significa davvero, ho pensato di pubblicare le informazioni qui.

Quindi, essendo un principiante git, posso vedere che la risposta di cui avevo bisogno era una risposta distintamente newbie. In particolare, quale sarà il "tuo ramo" di ... " frase significa che ci sono file che hai aggiunto e impegnato nel tuo repository locale, ma che non hai mai inviato all'origine. L'intento di questo messaggio è ulteriormente offuscato dal fatto che "git diff", almeno per me, non ha mostrato differenze. Non è stato fino a quando ho eseguito " git diff origin / master " che mi è stato detto che c'erano differenze tra il mio repository locale e il master remoto.

Quindi, per essere chiari:


" il tuo ramo è avanti di ... " = > Devi spingere verso il master remoto. Esegui " git diff origin / master " per vedere quali sono le differenze tra il tuo repository locale e il repository principale remoto.


Spero che questo aiuti altri neofiti.

(Inoltre, riconosco che ci sono sottigliezze di configurazione che possono parzialmente invalidare questa soluzione, come il fatto che il master potrebbe non essere effettivamente "remoto" e che "origine" sia un nome riconfigurabile usato dalla convenzione, ecc. Ma ai neofiti non importa questo genere di cose. Vogliamo risposte semplici e dirette. Potremo leggere le sottigliezze in seguito, una volta risolto il problema urgente.)

Earl

Ho avuto un problema simile a questo in cui la mia directory di lavoro era prima dell'origine di X commit ma il git pull stava causando Tutto su- to-date . Sono riuscito a risolverlo seguendo questo consiglio . Sto pubblicando questo qui nel caso in cui aiuti qualcun altro con un problema simile.

La correzione di base è la seguente:

$ git push {remote} {localbranch}:{remotebranch}

Dove le parole tra parentesi devono essere sostituite dal nome remoto, dal nome della filiale locale e dal nome della filiale remota. per es.

$ git push origin master:master

a volte c'è una differenza tra la versione memorizzata nella cache locale del master di origine (origin / master) e il vero master di origine.

Se si esegue git remote update , questo risincronizzerà origin master con origin / master

vedi la risposta accettata a questa domanda

Differenze tra git pull origin master & amp; git pull origin / master

  

Pensavo che il mio laptop fosse l'origine & # 8230;

Questo è un tipo di assurdità: origin si riferisce al repository remoto predefinito & # 8211; quello da cui solitamente prendi / tira le modifiche di altre persone.

  

Come posso:

  1. git remote -v ti mostrerà quale origin è; origin / master è il tuo segnalibro & # 8220; & # 8221; per l'ultimo stato noto del ramo master del repository origin e il tuo master è un ramo di tracciamento per origin / master . Tutto è come dovrebbe essere .

  2. Non & # 8217; t. Almeno non ha senso che un repository sia il repository remoto predefinito per se stesso.

  3. Non è & # 8217; t. Ti sta semplicemente dicendo che hai fatto così tanti commit a livello locale che non sono nel repository remoto (secondo l'ultimo stato noto di quel repository).

[Soluzione]

$ git push origin

^ questo mi ha risolto. Quello che ha fatto, ha sincronizzato il mio master (sul laptop) con "origin" " sul server remoto.

Sto lottando con questo problema e nessuna delle risposte precedenti affronta la domanda come la vedo io. Ho rimosso il problema dalle sue basi per vedere se posso chiarire il mio problema.

Creo un nuovo repository (rep1), inserisco un file e lo commetto.

mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"

Creo un clone di rep1 e lo chiamo rep2. Guardo dentro rep2 e vedo che il file è corretto.

cd ~
git clone ~/rep1 rep2
cat ~/rep2/README

In rep1 apporto una singola modifica al file e lo commetto. Quindi in rep1 creo un telecomando per puntare a rep2 e spingere le modifiche.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

Ora quando vado in rep2 e faccio uno 'stato git' mi viene detto che sono in anticipo sulle origini.

# 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 in rep2 è com'era in origine, prima del secondo commit. Le uniche modifiche che ho apportato sono rep1 e tutto quello che volevo fare era spingerle verso rep2. Cosa non sto afferrando?

Ti sta aspettando di " spingere " ;. Prova:

$ git push

Ho avuto questo problema di recente e ho pensato che fosse perché avevo eliminato alcuni file che non mi servivano più. Il problema è che git non sa che i file sono stati cancellati e vede che il server lo possiede ancora. (server = origine)

Quindi ho corso

git rm $(git ls-files --deleted)

E poi ha eseguito un commit e push.

Ciò ha risolto il problema.

Anch'io sono un principiante. Ho avuto lo stesso problema con i messaggi "la tua filiale è in anticipo rispetto all'origine / master di N commit". Fare il suggerito 'git diff origin / master' ha mostrato alcune differenze che non mi interessava tenere. Quindi ...

Dato che il mio clone git era per l'hosting e volevo una copia esatta del repository master e non mi importava di conservare le modifiche locali, ho deciso di salvare l'intero repository e crearne uno nuovo:

(sul computer host)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

Per convenienza, ero solito apportare modifiche al clone sul mio computer di hosting. Non piu. Apporterò queste modifiche al master, git ci impegnerò e farò un git pull. Spero che questo dovrebbe mantenere il mio clone git sul computer di hosting in completa sincronizzazione.

/ Nara

Mi chiedevo la stessa cosa per il mio repository. Nel mio caso avevo un vecchio telecomando a cui non spingevo più, quindi dovevo rimuoverlo.

Ottieni l'elenco dei telecomandi:

git remote

Rimuovi quello che non ti serve

git remote rm {insert remote to remove}

È possibile ripristinare un commit specifico prima che vengano eseguiti i propri commit.

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)

Usa git log per trovare quale commit era il commit che avevi prima che le modifiche locali avessero luogo.

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

Prendi nota dei commit locali e ripristina direttamente il commit precedente:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

Ho avuto il problema " Il tuo ramo è davanti a "origin / master" di nn commit. " quando ho inviato un repository remoto con:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

Quando ho scoperto che il mio indirizzo remoto era nel file .git / FETCH_HEAD e ho usato:

git push

il problema è scomparso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top