Come si ottiene git a tirare sempre da un ramo specifico?

Non sono un vero maestro, ma ci lavoro da un po ‘di tempo con diversi progetti. In ogni progetto, ho sempre git clone [repository] e da quel momento, posso sempre git pull , a patto che non abbia cambiamenti eccezionali, ovviamente.

Recentemente, ho dovuto ripristinare un ramo precedente, e l’ho fatto con git checkout 4f82a29 . Quando ero di nuovo pronto a tirare, ho scoperto che dovevo riportare il mio ramo al master. Ora, non posso tirare usando un git pull dritto, ma, al contrario, devo specificare il git pull origin master , che è fastidioso, e mi indica che non capisco completamente cosa sta succedendo.

Cosa è cambiato che non mi permette di fare una git pull dritta senza specificare il master di origine, e come posso cambiarlo?

AGGIORNARE:

 -bash-3.1$ cat config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [branch "master"] [remote "origin"] url = git@github.com:user/project.git fetch = refs/heads/*:refs/remotes/origin/* 

AGGIORNAMENTO 2: Per essere chiari, capisco che il mio metodo originale potrebbe non essere corretto, ma ho bisogno di risolvere questo repository in modo che possa semplicemente usare git pull nuovo. Attualmente, git pull risulta in:

 -bash-3.1$ git pull You asked me to pull without telling me which branch you want to merge with, and 'branch.master.merge' in your configuration file does not tell me either. Please name which branch you want to merge on the command line and try again (eg 'git pull '). See git-pull(1) for details on the refspec. If you often merge with the same branch, you may want to configure the following variables in your configuration file: branch.master.remote = branch.master.merge = remote..url = remote..fetch = See git-config(1) for details. 

Posso dire a git pull quale ramo unire, e funziona correttamente, ma git pull non funziona come originariamente prima del mio git checkout .

Sotto [branch "master"] , prova ad aggiungere quanto segue al file di configurazione Git del repository ( .git/config ):

 [branch "master"] remote = origin merge = refs/heads/master 

Questo dice a Git 2:

  1. Quando sei nel ramo principale, il telecomando predefinito è l’origine.
  2. Quando si utilizza git pull sul ramo master, senza remote e branch specificate, utilizzare il telecomando predefinito (origine) e unire le modifiche dal ramo master remoto.

Non sono sicuro del motivo per cui questa configurazione sarebbe stata rimossa dalla configurazione, però. Potrebbe essere necessario seguire i suggerimenti che anche altre persone hanno pubblicato, ma questo potrebbe funzionare (o aiutare almeno).

Se non si desidera modificare manualmente il file di configurazione, è ansible utilizzare lo strumento da riga di comando:

 $ git config branch.master.remote origin $ git config branch.master.merge refs/heads/master 

Se preferisci, puoi impostare queste opzioni tramite la linea di comando (invece di modificare il file di configurazione) in questo modo:

  $ git config branch.master.remote origin $ git config branch.master.merge refs/heads/master 

Oppure, se sei come me, e vuoi che questo sia l’impostazione predefinita per tutti i tuoi progetti, compresi quelli su cui potresti lavorare in futuro, quindi aggiungilo come impostazione di configurazione globale:

  $ git config --global branch.master.remote origin $ git config --global branch.master.merge refs/heads/master 
 git branch --set-upstream master origin/master 

Questo aggiungerà le seguenti informazioni al tuo file di config :

 [branch "master"] remote = origin merge = refs/heads/master 

Se hai branch.autosetuprebase = always allora aggiungerà anche:

  rebase = true 

Trovo difficile ricordare esattamente gli argomenti git config o git branch come nelle risposte di mipadi e Casey, quindi uso questi 2 comandi per aggiungere il riferimento upstream:

 git pull origin master git push -u origin master 

Questo aggiungerà le stesse informazioni al tuo .git / config, ma lo trovo più facile da ricordare.

Git pull combina due azioni: recuperando nuovi commit dall’archivio remoto nelle filiali tracciate e quindi unendole nel ramo corrente .

Quando hai effettuato il check out di un particolare commit, non hai un branch attuale, hai solo HEAD che punta all’ultimo commit eseguito. Quindi git pull non ha tutti i parametri specificati. Ecco perché non ha funzionato.

In base alle informazioni aggiornate, ciò che stai cercando di fare è ripristinare il repository remoto. Se conosci il commit che ha introdotto il bug, il modo più semplice per gestirlo è con git revert che registra un nuovo commit che annulla il commit buggy specificato:

 $ git checkout master $ git reflog #to find the SHA1 of buggy commit, say b12345 $ git revert b12345 $ git pull $ git push 

Dal momento che è il tuo server che vuoi cambiare, assumerò che non è necessario riscrivere la cronologia per hide il commit buggato.

Se il bug è stato introdotto in un commit di unione, questa procedura non funzionerà. Vedi How-to-revert-a-faulty-merge .

Non volendo modificare il mio file di configurazione git ho seguito le informazioni nel post di @ mipadi e ho usato:

 $ git pull origin master 

Esiste anche un modo per configurare Git in modo che, sempre, spinga e spinga il ramo remoto equivalente al ramo attualmente controllato per la copia di lavoro. Si chiama un ramo di monitoraggio che git ready raccomanda di impostare di default .

Per il prossimo repository sopra la directory di lavoro attuale:

 git config branch.autosetupmerge true 

Per tutti i repository Git, che non sono configurati diversamente:

 git config --global branch.autosetupmerge true 

Tipo di magia, IMHO ma questo potrebbe aiutare nei casi in cui il ramo specifico è sempre il ramo attuale .

Quando hai branch.autosetupmerge impostato su true e checkout su un ramo per la prima volta, Git ti dirà di tracciare il ramo remoto corrispondente:

 (master)$ git checkout gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch 'gh-pages' 

Git quindi passerà automaticamente al ramo corrispondente:

 (gh-pages)$ git push Counting objects: 8, done. Delta compression using up to 2 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1003 bytes, done. Total 6 (delta 2), reused 0 (delta 0) To git@github.com:bigben87/webbit.git 1bf578c..268fb60 gh-pages -> gh-pages 

La tua domanda immediata su come farlo diventare master, è necessario fare ciò che dice. Specificare il refspec da inserire nella configurazione del ramo.

 [branch "master"] merge = refs/heads/master