Verschil tussen git pull en git pull origin master

Wat is het verschil tussen deze twee commando’s?

git pull

en

git pull origin master

Antwoord 1, autoriteit 100%

[Bewerken, mei 2018: git pullis niet langer een shellscript en een paar details zijn anders in het moderne Git. Pull heeft nu ook recursie-opties die het nuttiger maken met submodules. Dit antwoord negeert de submodules.]

Het git pullscript is bedoeld als een gemakkelijke methode voor het aanroepen van git fetchgevolgd door git merge(of, met git pull --rebase, waarbij git fetchwordt aangeroepen gevolgd door git rebase).

Het eerste extra argument voor git pullvertelt het welke afstandsbediening moet worden gegeven aan de bewerking fetch:

git pull origin

betekent bijvoorbeeld ophalen van origin. Als je dit weglaat, gebruikt Git de remotevan de huidige branch:

$ git branch
* master
$ git config --get branch.master.remote
origin

De tweede (en eventuele aanvullende) argumenten voor git pullvertellen in welke branch of branches het moet worden samengevoegd. Dit zijn de namen van de branches zoals gevonden op de remote. Stel bijvoorbeeld dat u een nieuwe branch feature2maakt die origin/featurevolgt:

$ git checkout -b feature2 origin/feature

Als je nu wilt ophalen van originom nieuwe commits op te halen die zijn toegevoegd aan hun featurebranch, maar ze wilt samenvoegen met je lokale feature2filiaal:

$ git pull origin feature

Als je de branch-naam(en) weglaat, gebruikt git de mergevan de huidige branch:

$ git config --get branch.feature2.merge
feature

Merk op dat als je meerdere branch-namen opgeeft, Git een “octopus merge” zal doen. In mijn ervaring verrast dit mensen meestal de eerste keer: ze denken dat git pull remotebr1br2zal draaien git fetchgevolgd door een reeks afzonderlijke git merge-s op elke branch, maar dat is niet wat er gebeurt.


Antwoord 2, autoriteit 41%

git pull origin masterzal wijzigingen uit de origin remote, master branch halen en deze samenvoegen met de lokale uitgecheckte branch.

waar als git pullnieuwe commits ophaalt van alle getraceerde branches van de standaard remote(origin). je kunt ook de standaard remote en branch naam configureren in het gitconfigbestand.

git branch --set-upstream master origin/master

Dit voegt de volgende informatie toe aan je gitconfig-bestand:

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

nu wanneer je git pullzegt, wordt het opgehaald van de oorspronkelijke master.


Antwoord 3, autoriteit 20%

git pull origin masteris de uitgebreide vorm die zowel de remote (origin) als de branch specificeert om van te pullen (master). Als je dat niet specificeert, zal Git een standaardgedrag toepassen dat wordt uitgelegd in de documentatie:

Vaak gebruiken mensen git pullzonder een parameter op te geven. Traditioneel is dit gelijk aan het zeggen van git pull origin. Als echter configuratie branch.<name>.remoteaanwezig is in branch <name>, wordt die waarde gebruikt in plaats van oorsprong.

[…]

Om te bepalen welke remote branches moeten worden opgehaald (en optioneel worden opgeslagen in de remote-tracking branches) wanneer de opdracht wordt uitgevoerd zonder enige refspec-parameters op de opdrachtregel, waarden van de configuratievariabele remote.<origin>.fetchworden geraadpleegd, en als er geen zijn, wordt het bestand $GIT_DIR/remotes/<origin>geraadpleegd en zijn de Pull:-regels gebruikt.

Other episodes