2013-06-06 12 views
20

Tutto è nel titolo ...Perché "git status" non visualizza commit non premuti in un ramo?

ho letto questa domanda: Viewing Unpushed Git Commits

Ma io non capisco perché git status visualizza tutti i commit unpushed nel ramo principale, ma non visualizza nulla in altri rami.

Qualcuno può spiegarlo?

EDIT

Ecco quello che comanda e uscite ho fatto/ottenere:

[email protected]:/home/repo/$ git branch 
    new_feature 
* master 

[email protected]:/home/repo/$ git checkout new_feature 
Switched to branch 'new_feature' 

[email protected]:/home/repo/$ echo test > newfile.txt 
[email protected]:/home/repo/$ git add newfile.txt 
[email protected]:/home/repo/$ git commit -m "Test commit" 
[new_feature 51c6a64] Test commit 
1 file added 
[email protected]:/home/repo/$ git status 
# On branch new_feature 
nothing added to commit 

Perché lo commettono appare quando si usa git status?

+0

possibile duplicato di [Come fai diventare un ramo Git esistente traccia di un ramo remoto?] (http://stackoverflow.com/questions/520650/how-do-you-make-an-existing-git-branch-track-a-remote-branch) – arnorhs

+3

@arnorhs, sei tecnicamente corretto ma presumo che l'OP non fosse a conoscenza di tutto quel meccanismo di tracciamento delle filiali in modo da non avere alcuna possibilità di trovare quella domanda. Quindi non voterei per chiudere la risposta. – kostix

+0

cool. questo ha senso per me. Posso anche immaginare che le persone che provano a google per la domanda siano formulate in modo simile alla domanda degli OP se non hanno familiarità con il termine git corretto per il tracciamento. È difficile entrare in git con tutto il gergo. – arnorhs

risposta

20

La ragione è che il ramo principale ha in realtà un ramo remoto, in origine/master che il ramo è stato impostato per tracciare.

Ciò significa che ogni volta che si esegue un commit da master, e quindi un git git status ti dirà quali commit sono diversi tra il tuo ramo locale e il ramo remoto.

Quando si crea un nuovo ramo, non esiste alcun ramo remoto corrispondente per impostazione predefinita. Puoi vedere questo facendo git branch -a. che ti mostrerà tutti i rami remoti che sono stati impostati.

Quindi ci sono due cose in gioco:

1) Non si dispone di una filiale remota per la vostra filiale locale 2) Il suo ramo non è configurato per monitorare i cambiamenti dal ramo remoto

un modo semplice per fare una filiale remota e configurare il monitoraggio per la vostra filiale locale, è quello di spingere la sezione locale di una filiale remota:

git checkout new_feature 
git push -u origin new_feature 

Normalmente, quando basta spingere senza l'opzione -u, nessun inseguimento sarà B e istituito, ma il tuo ramo sarà ancora spinto. Ma quando passate nell'interruttore -u dirà git che volete anche impostare il ramo per tenere traccia delle modifiche dal ramo remoto.

Dopo aver fatto questo e quindi apportare modifiche e li impegnano, poi fare un git status si otterrà il risultato atteso di "Il vostro ramo è una testa di origine/new_feature da 1 commit"

+0

Ho provato quello che hai suggerito: git branch -u origine/my_other_branch e ottenuto in risposta: errore: sconosciuto switch 'u' ... – Aurelien

+0

ah, versione git più vecchia.Modificherò la mia risposta – arnorhs

+0

Ho anche trovato una domanda doppia, che ho aggiunto un flag per – arnorhs

Problemi correlati