Wat is het verschil tussen deze twee commando’s?
git pull
en
git pull origin master
Antwoord 1, autoriteit 100%
[Bewerken, mei 2018: git pull
is 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 pull
script is bedoeld als een gemakkelijke methode voor het aanroepen van git fetch
gevolgd door git merge
(of, met git pull --rebase
, waarbij git fetch
wordt aangeroepen gevolgd door git rebase
).
Het eerste extra argument voor git pull
vertelt 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 remote
van de huidige branch:
$ git branch
* master
$ git config --get branch.master.remote
origin
De tweede (en eventuele aanvullende) argumenten voor git pull
vertellen 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 feature2
maakt die origin/feature
volgt:
$ git checkout -b feature2 origin/feature
Als je nu wilt ophalen van origin
om nieuwe commits op te halen die zijn toegevoegd aan hun feature
branch, maar ze wilt samenvoegen met je lokale feature2
filiaal:
$ git pull origin feature
Als je de branch-naam(en) weglaat, gebruikt git de merge
van 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 remotebr1br2
zal draaien git fetch
gevolgd door een reeks afzonderlijke git merge
-s op elke branch, maar dat is niet wat er gebeurt.
Antwoord 2, autoriteit 41%
git pull origin master
zal wijzigingen uit de origin remote, master branch halen en deze samenvoegen met de lokale uitgecheckte branch.
waar als git pull
nieuwe commits ophaalt van alle getraceerde branches van de standaard remote(origin). je kunt ook de standaard remote en branch naam configureren in het gitconfig
bestand.
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 pull
zegt, wordt het opgehaald van de oorspronkelijke master.
Antwoord 3, autoriteit 20%
git pull origin master
is 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 pull
zonder een parameter op te geven. Traditioneel is dit gelijk aan het zeggen vangit pull origin
. Als echter configuratiebranch.<name>.remote
aanwezig 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>.fetch
worden geraadpleegd, en als er geen zijn, wordt het bestand$GIT_DIR/remotes/<origin>
geraadpleegd en zijn dePull:
-regels gebruikt.