У чому різниця між цими командами ?:
# 1
git pull
# 2
git pull origin
# 3
git pull origin master
# 4
git pull origin/master
# 5
git pull origin HEAD:master
У чому різниця між цими командами ?:
# 1
git pull
# 2
git pull origin
# 3
git pull origin master
# 4
git pull origin/master
# 5
git pull origin HEAD:master
site:stackoverflow.com git Difference "git pull" "git pull origin master".
Відповіді:
git pull- це зручна команда, яка виконує різні дії одночасно. В основному це просто комбінація git fetch, яка підключається до віддаленого сховища та отримує нові коміти та git merge(або git rebase), яка включає нові коміти у вашу локальну гілку. Через дві різні команди, що беруть участь, значення git pullне завжди очевидно.
Ви можете налаштувати висхідний потік для локальної гілки. Після свіжого клону ви отримаєте локальну гілку "master", віддалене "origin", а ваша головна гілка має "origin / master" як вище. Я припускаю, що це налаштування нижче. (Ви можете побачити свою попередню конфігурацію за git branch -vvдопомогою .git / config.)
Тепер до ваших запитань:
git pull= git fetch origin+ git merge origin/master(або що завгодно вище)git pull origin= git pull(поки джерелом є ваш пульт дистанційного керування)git pull origin master= git fetch origin master+git merge FETCH_HEADgit pull origin/master : недійсний, якщо у вас немає пульта з назвою "origin / master"git pull origin HEAD:master: Намагається безпосередньо скинути місцевого майстра до того, на що вказує HEAD за початком. (Не роби цього.)git pull origin HEAD:masterпоганої ідеї?
git pull
git pull origin HEAD:masterпо суті (буквально, доки сценарій не був переписаний на C в Git 2.6) передає HEAD:masterчастину git fetch, тому робить те, що git fetchробить для цього кроку; потім об'єднує або перебазує, використовуючи хеш git fetchкоміту, який отримав крок. Refspecs є джерелом: dest , тому HEADпередається іншому Git для перекладу. Тож це залежить від іншого Git, але зазвичай інший Git - HEADце його назва master. Якщо ви не самостійні master, злиття або перебазування використовує оновлення отримання master( dest ) (якщо fetchне вдається).
git pull origin br1 br2. Це виглядає і відчуває, як це повинно git checkout br1; git pull origin; git checkout br2; git pull origin— але це не так! Натомість він фактично робить:, git fetch origin && git merge origin/br1 origin/br2який об’єднує обидва результати отримання у вашу поточну гілку, щось Git називає об’єднанням восьминога . Цього ніколи ніхто не хоче. Ймовірно , git pullслід відкинути команду цілком (хто дійсно робить хоче , він може працювати принести перший, потім злийте).
A pull- це в основному a fetch(який отримує деякі коміти та пов'язані об'єкти з віддаленого сховища у ваш), а потім операція, яка "застосовує" їх до вашої робочої копії. Другий етап, за замовчуванням, виконується з використанням, mergeале ви можете встановити для pull.rebaseзмінної значення trueі тоді вона буде перебазувати.
З pullкомандою з’являються два запитання . По-перше, що саме отримується? А друге - як він застосовує ці зміни до моєї робочої копії? Почнемо з першого. Повна форма команди:
git pull [options] [repository] [<refspec>...]
Це optionsпрапори, які контролюють поведінку (наприклад, --rebase, щоб зробити pullроботу як fetch+, rebaseнавіть якщо вона pull.rebaseє false).
repository це ім'я (або URL-адреса) пульта дистанційного керування, з якого потрібно отримати.
refspecs - це стислий спосіб вказати, які посилання на пульті дистанційного керування ви хочете отримати та куди ви хочете помістити їх у свою поточну робочу копію.
Давайте спочатку приймемо найбільш чітку форму.
git pull origin branch1:branch2
Це в основному говорить, витягніть зміни у посиланні branch1на викликаному пульті, originа потім об’єднайте (або перебазуйте) їх у локальну гілку branch2. Якщо я, наприклад, скажу git pull origin master:dev, я отримаю локальну гілку, devяка буде вказувати на той самий коміт, що і master. Детальна інформація про те, як вказати специфікації, знаходиться тут . Ви можете використовувати a *для позначення декількох специфікацій. Наприклад, git pull origin refs/heads/*:refs/heads/*буде витягувати всі гілки (зберігаються в heads) до локального сховища та об’єднувати їх у локальні гілки з однаковими іменами.
Тепер давайте видалимо аргументи по одному, щоб обговорити, як працює за замовчуванням. По-перше, ми можемо видалити пункт призначення з нашого refspec і просто сказати git pull origin branch1. Це спочатку fetchвіддалить гілку branch1до вашого локального сховища. Він буде доступний як тимчасова довідка FETCH_HEAD. Після цього він запуститься, git merge FETCH_HEADщо об’єднає цю гілку у вашу поточну активну гілку (тобто HEAD). Це часто робиться, коли ви перебуваєте в локальній гілці і хочете отримати зміни з віддаленого в цю гілку.
А тепер відкинемо branch1повністю і просто скажемо git pull origin. Тепер git знає, звідки взяти ( origin), але не знає, що взяти. Для цього є деякі за замовчуванням. Найбільш сценарій - це коли у вашому файлі конфігурації є branch.<name>.mergeопція (це запис, що викликається mergeвсередині розділу типу [branch "master"]). Якщо це так, він буде використовувати там специфікації для операції.
Якщо ми скинемо originповністю і просто скажемо git pull, він перевірить конфігурацію, щоб дізнатись, чи є параметр, branch.<name>.remoteякий вказує, з якого пульта дистанційного керування слід витягнути. Це разом із вищесказаним підказує, що потрібно тягнути.
Ваші пункти 4 та 5 не є звичайними випадками використання. Перше має сенс, якщо у вас є пульт дистанційного керування, origin/masterякий малоймовірний. origin/masterце , як правило , локальна посилання , яка відстежує masterгілка на пульті дистанційного керування origin. Другий спробує отримати зміни на HEADпульті дистанційного керування (зазвичай це гілка за замовчуванням master), а потім об’єднати їх у свій локальний master. Хоча це може бути те, що ви хочете робити регулярно, команда досить нетрадиційна, і я не часто бачив, що я часто використовував.
Я пропустив кілька деталей, але їх має бути достатньо, щоб забезпечити вам безпеку та комфорт у вашій щоденній роботі. Для всіх закривавлених деталей, ви можете перевірити на сторінці довідника git pull.
masterз пульта, але вона буде викликана devлокально.
git pull origin refs/heads/*:refs/heads/*не працював у мене, і я зрозумів no matches found: refs/heads/*:refs/heads/*. Я також намагався git pull origin refs/remotes/origin/*:refs/heads/*, але і це не спрацювало. Я не думаю, що витягування всіх гілок на віддаленому в одній команді можливо, як і подальше злиття / перебазування всіх цих гілок у їх наступні локальні гілки.
git pullбез налаштованого вищого потоку? (На сторінці користувача вказано лише значення, яке за замовчуванням буде налаштовано вгору за течією.)