При запуске git pull
на master
ветке, он обычно тянет с origin/master
. Я нахожусь в другой ветке с именем newbranch
, но мне нужно запустить команду, которая выполняет операцию git pull
from origin/master
в, master
но я не могу запустить ее, git checkout
чтобы изменить выбранную ветку, пока не завершится извлечение. Есть ли способ сделать это?
Чтобы дать некоторую предысторию, репозиторий хранит веб-сайт. Я внес некоторые изменения newbranch
и развернул их, переключив веб-сайт на newbranch
. Теперь эти изменения были объединены в master
ветку вверх по течению , я также пытаюсь переключить веб-сайт обратно в master
ветку. На данный момент newbranch
и origin/master
идентичны, но master
отстают origin/master
и нуждаются в обновлении. Проблема в том, что если я сделаю это традиционным способом:
$ git checkout master
# Uh oh, production website has now reverted back to old version in master
$ git pull
# Website is now up to date again
Мне нужно добиться того же, что и выше ( git checkout master && git pull
), но без изменения рабочего каталога на более раннюю версию во время процесса.
источник
newbranch
и нечего прятать!git fetch; git merge origin/master
изнутриnewbranch
. Клонирование всей второй копии репозитория не дает никаких преимуществ.Ответы:
У вас есть рабочее дерево, к которому вы не хотите прикасаться, поэтому используйте другое. Клон дешевый, он для этого создан.
Проблема со всеми остальными ответами здесь в том, что они на самом деле не работают. Если вам нужно слияние или перебазирование, для которого вы настроили pull, вам понадобится другое рабочее дерево и описанная выше процедура. В противном случае просто
git fetch; git checkout -B master origin/master
подойдет.источник
git checkout master
вы проверите старуюmaster
ветку, потому что вы не сделалиgit pull
вmain
папке, чтобы синхронизировать ее с origin / master. Это то, чего я пытаюсь избежать.master
обратноorigin
, но я не верю, что ваша окончательная проверка обновленаmaster
. Нетgit pull
необходимости обновлятьmaster
ветку вmain
каталоге, поэтому, если я что-то не упускаю, ваши команды ничем не отличаются от простого запускаgit checkout master
и получения старогоmaster
дерева. Если вы присмотритесь, вы не выполняете никаких команд вmain
каталоге, которые обмениваются данными с восходящимПрямолинейно: обновление из удаленной ветки в еще не извлеченную мастер -ветку :
где происхождение - ваш пульт, и вы в настоящее время выписаны из какой-то ветки, например dev .
Если вы хотите обновить текущую ветку в дополнение к указанной ветке за один раз:
источник
Здесь ответ: объединять, обновлять и извлекать ветки Git без использования проверок
источник
git fetch origin master:master
.git fetch
сам по себе предполагает, что вы хотите обновить текущую ветку, а не какую-то другую.Как оказалось, ответ обманчиво прост:
Это позволяет обновить
master
ветку без переключения на него до тех пор , после того, как он был обновлен.источник
Вы беспокоитесь о том, что нельзя исправить, поскольку операции Git не атомарны. У вас всегда будет дыра, в которой ваш рабочий каталог находится на полпути между ветвями, даже если вы обновляете мастер без предварительного переключения на него. Вот почему Git не является инструментом развертывания. .
Поскольку вы на самом деле не фиксируете код в своей производственной среде (я надеюсь), вам не нужно проверять ветку. Вы можете просто выполнить a,
git fetch
чтобы обновить свои удаленные ссылки, а затемgit checkout origin/master
переместить рабочий каталог непосредственно в коммит, на который в данный момент указываетorigin/master
. Это переведет вас в состояние отдельной головы, но, опять же, поскольку вы не фиксируете код, это не имеет значения.Это самая маленькая дыра, которую вы собираетесь получить, но, как я уже сказал, дыра все еще существует;
checkout
не атомарен.источник
origin/master
, это может просто помочь.git fetch
прежде чем делать что-либо еще, и избавьтесь от фактической передачи данных.Для этого вы можете использовать update-ref:
Обратите внимание, что это отбросит любые локальные коммиты в основной ветке. В вашем случае их не будет, так что это нормально. Для других людей, пытающихся сделать это там, где есть локальные коммиты, я не думаю, что это возможно, поскольку слияние может выполняться только в текущей ветке.
источник
git branch --force master origin/master
? Это заставляет местную головуmaster
указывать на головуorigin
smaster
Решение Malvineous работает для меня
Просто укажите ошибку
Итак, я бегу с опцией -D
Спасибо
источник
git fetch origin master:master
master
.master
которые еще не внесены ,origin/master
будут объединены с вашим мастером.источник