Come posso trovare la posizione di origine / master in git e come posso cambiarlo?

Sono un principiante Git. Recentemente 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 modifiche al mio portatile Mac sul treno da / per lavoro e poi li spingo a non macchiare quando ho una connessione di rete usando il seguente comando:

git push unfuddle master 

Uso Capistrano per le distribuzioni e il codice pull dal repository unfuddle utilizzando 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é. Ho pensato che il mio laptop fosse l’origine … ma non so se il fatto che io abbia originariamente tirato da Subversion o spinto a Unfuddle è ciò che sta facendo apparire il messaggio. Come posso:

  1. Scopri dove Git pensa “origine / padrone” è?
  2. Se è altrove, come posso trasformare il mio laptop in “origine / master”?
  3. Ricevi questo messaggio per andare via. Mi fa pensare che Git sia infelice per qualcosa.

Il mio mac è in esecuzione Git versione 1.6.0.1.


Quando eseguo git remote show origin come suggerito da dbr, ottengo il seguente:

 ~/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 il seguente:

 ~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v origin /Users/brian/Projects/GeekFor/gf/.git unfuddle [email protected]:spilth/geekfor.git 

Ora, interessante, sto lavorando al mio progetto nella directory geekfor ma dice che la mia origine è la mia macchina locale nella directory gf . Credo che gf fosse la directory temporanea che ho usato quando ho convertito il mio progetto da Subversion a Git e probabilmente da dove ho cercato di non farlo. Quindi credo di aver estratto una nuova copia da unfuddle nella directory geekfor .

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

 git remote rm origin git remote add origin [email protected]:spilth/geekfor.git 

1. Scopri dove Git pensa che “origin / master” stia usando git-remote

 git remote show origin 

.. che restituirà qualcosa come ..

 * remote origin URL: [email protected]:~/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 [email protected]/myrepo.git git push unfuddle 

..git spingerà le modifiche a quell’indirizzo che hai aggiunto. È come un segnalibro, per repository remoti.

Quando si esegue lo git status , si controlla se il remoto è mancante commette (rispetto al repository locale) e, in tal caso, in base al numero di commit. Se si trasferiscono tutte le modifiche su “origine”, entrambe saranno sincronizzate, quindi non si otterrà quel messaggio.

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

Non ha senso farlo. Dì “origine” è rinominato in “laptop” – non vuoi mai fare git push laptop dal tuo laptop.

Se vuoi rimuovere il telecomando di origine, lo fai …

 git remote rm origin 

Questo non cancellerà nulla (in termini di contenuto di file / revisioni-cronologia). Questo interromperà il messaggio “il tuo ramo è avanti …”, poiché non confronterà più il tuo repository con il telecomando (perché è andato!)

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

Git usa l’ origin di default quando fai cose come git push o git pull . Quindi, se hai un telecomando che usi molto (Scongiungi, nel tuo caso), ti consiglio di aggiungere lo slam come “origine”:

 git remote rm origin git remote add origin [email protected]:subdomain/abbreviation.git 

oppure fai quanto sopra in un comando usando set-url:

 git remote set-url origin [email protected]:subdomain/abbreviation.git 

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

Sono giunto a questa domanda cercando una spiegazione su cosa il messaggio “il tuo ramo è avanti per …” significa, nello schema generale di git. Non c’è stata una risposta a questo qui, ma poiché questa domanda si trova attualmente nella parte superiore di Google quando si cerca la frase “Il tuo ramo è più avanti di” origine / master “, e da allora ho capito cosa significa realmente il messaggio , Ho pensato di pubblicare le informazioni qui.

Quindi, essendo un principiante, posso vedere che la risposta di cui avevo bisogno era una risposta decisamente newbie. In particolare, la frase “il tuo ramo è avanti per …” significa che ci sono file che hai aggiunto e impegnati nel tuo repository locale, ma che non hai mai spinto 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 per …” => Devi passare al master remoto. Esegui “git diff origin / master” per vedere quali sono le differenze tra il tuo repository locale e il repository master remoto.


Spero che questo aiuti altri neofiti.

(Inoltre, riconosco che ci sono sottigliezze di configurazione che possono invalidare parzialmente questa soluzione, come il fatto che il master potrebbe non essere effettivamente “remoto”, e che “origin” è un nome riconfigurabile usato per convenzione, ecc. Ma i neofiti fanno non ci importa di questo genere di cose, vogliamo risposte semplici e dirette: possiamo leggere le sottigliezze più tardi, una volta risolto il problema urgente).

Conte

Ho avuto un problema simile a questo in cui la mia directory di lavoro era in ahead of origin by X commits ma il git pull stava risultando in Everything up-to-date . Sono riuscito a sistemarlo seguendo questo consiglio . Sto postando 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 del ramo locale e dal nome del ramo remoto. per esempio

 $ git push origin master:master 

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

Se si esegue git remote update questo risincronizza il master di origine con origine / master

vedere la risposta accettata a questa domanda

Differenze tra git pull origin master e git pull origin / master

Pensavo che il mio portatile fosse l’origine …

Questo è un po ‘privo di senso: l’ origin riferisce al repository remoto predefinito, quello che di solito recupera / estrae le modifiche di altre persone.

Come posso:

  1. git remote -v ti mostrerà che cos’è l’ origin ; origin/master è il tuo “segnalibro” per l’ultimo stato conosciuto del ramo master del repository di origin e il tuo master è un ramo di tracciamento per origin/master . Questo è tutto come dovrebbe essere .

  2. Non lo fai. Almeno non ha senso che un repository sia il repository remoto predefinito per se stesso.

  3. Non lo è. Si tratta semplicemente di dirvi che avete fatto così tanti commit localmente che non sono nel repository remoto (secondo l’ultimo stato conosciuto di quel repository).

[Soluzione]

 $ git push origin 

^ questo l’ha risolto per me Quello che ha fatto, ha sincronizzato il mio master (sul laptop) con “origin” che si trova sul server remoto.

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

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

 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 all’interno rep2 e vedo che il file è corretto.

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

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

 cd ~/rep1  git remote add rep2 ~/rep2 git push rep2 master 

Ora quando vado in rep2 e faccio uno ‘stato git’ mi viene detto che sono più avanti dell’origine.

 # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # modified: README # 

README in rep2 è come era originariamente, prima del secondo commit. Le uniche modifiche che ho fatto sono di rip1 e tutto quello che volevo fare era spingerle a rip2. Che cosa non sto afferrando?

Ti sta aspettando per “spingere”. Provare:

$ git push

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

Così ho corso

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

E poi ha eseguito un commit e push.

Questo ha risolto il problema.

Sono un newbie git pure. Ho avuto lo stesso problema con i messaggi “il tuo ramo è più avanti dell’origine / maestro da N commits”. Facendo il suggerito ‘git diff origin / master’ ho mostrato alcune differenze che non mi importava di mantenere. Così …

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

(sulla macchina hosting)

 mv myrepo myrepo git clone [email protected]_HOST:/REPO_DIR myrepo 

Per convenienza, ero solito apportare modifiche al clone sulla mia macchina hosting. Non piu. Farò quelle modifiche al maestro, si impegnerà lì, e farà un tiro a vuoto. Spero che questo dovrebbe tenere il mio clone git sulla macchina di hosting in completa sincronizzazione.

/ Nara

Mi stavo chiedendo la stessa cosa del mio repository. Nel mio caso avevo un vecchio telecomando che non stavo spingendo più così ho dovuto rimuoverlo.

Ottieni un elenco di telecomandi:

 git remote 

Rimuovi quello che non ti serve

 git remote rm {insert remote to remove} 

È ansible ripristinare un commit specifico prima che si verifichino 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 è stato il commit che avevi prima delle modifiche locali.

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

Prendi nota dei commit locali e resetta direttamente al commit precedente:

 git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e 

Ho avuto il problema “La tua filiale è più avanti di” origine / master “di nn commit.” quando ho spinto a un repository remoto con:

 git push ssh://[email protected]/yyy/zzz.git 

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

 git push 

il problema è scomparso.