2015-10-23 2 views
0

Я новичок в Git и задаюсь вопросом. Эти две команды кажутся common pairing:Использование источника в командах Git

git fetch --all 
git reset --hard origin/master 

Если моя цель состоит в том, чтобы сбросить локальный клон в чистом состоянии, как это отличается от любой из следующих?

git fetch --all 
git reset --hard master 
# no origin 

Или

git reset --hard origin/master 
# no fetch 

Похоже, что выборка первых не нужна, если мы хотим, чтобы указать пульт дистанционного управления непосредственно в любом случае. Я что-то не понимаю? Это конвенция с целью или просто традиция/привычка без основы?

Почему я спрашиваю:

Я пишу сценарии для сборки машины. Я хочу получить все в определенный момент времени, а затем работать с локальным контентом на протяжении всей сборки, поэтому нет возможности внести изменения в конструкцию. Похоже, я хотел бы извлечь из удаленного один раз и не указывать origin в командах после этого. Тем не менее, мне сложно найти примеры этого онлайн, поэтому я не был уверен, есть ли что-то, чего я не видел.

+0

Для справок в будущем 'origin/master' и' master' являются как ** локальными ** ветвями, так и разными. На самом деле выборка необходима для обновления локальной ветви 'origin/master'. – Zach

ответ

2

Сначала основы удаленных филиалов. Ваш репозиторий выглядит примерно так.

A - B - C [origin/master] 
     \ 
      D - E [master] 

master и origin/master являются обе ветви, которые только этикетками, которые указывают на фиксацию. В этом случае вы сделали две фиксации до master с момента последнего приезда.

Git не разговаривает с сетью, если вы не сообщите об этом. Он отслеживает последний раз, когда он смотрел на удаленный репозиторий с «удаленной ветвью». origin/master - «удаленная ветка». Это ваша локальная копия ветки master на удаленном телефоне с именем origin обновлена ​​в последний раз, когда был запущен git fetch origin или git fetch --all (или git pull, что делает выборку).


git reset --hard origin/master 

Это используется для выбросить всю свою работу на местах. Это приведет к сбросу текущей ветви и рабочего каталога туда, где находится origin/master, то есть C. D и E будут потеряны.

A - B - C [origin/master] 
     \ 
      D - E [master] 

git reset --hard origin/master 

A - B - C [origin/master] 
      [master] 

git reset --hard master 

Это сбросит текущую ветку и рабочий каталог обратно master. Если вы оказались на master, это отменит вашу незавершенную работу. Но если вы в другом филиале, , вы просто сдули свою ветку.

Чтобы выбросить незафиксированные изменения, более безопасная вещь - git reset --hard HEAD.HEAD - указатель на текущую проверку. Он будет работать независимо от того, в какой отрасли вы находитесь. У меня есть aliased до clear.


Я хочу, чтобы принести все в один момент времени, а затем работать с локального контента на время сборки, так что не случайно изменения делаются неполный путь через сборки ,

Git не разговаривает с сетью, если вы не сообщите об этом. Есть две команды, которые будут обновлять ваш локальный репозиторий, git fetch и git pull (что делает выборку). Если вы не запустите их, удаленные ветви origin/ не изменятся.

Если вы заберете и оплатите покупку в начале своей сборки, все будет в порядке. Если вам нужно выполнить сброс в чистое состояние, вы можете запустить git reset --hard HEAD. Вы также можете запустить git clean -dxf, который выкинет любые невоспроизводимые или проигнорированные файлы, такие как сбор артефактов.

+0

Итак, я неправильно понял использование 'origin /', это предложение очистило его для меня: «origin/master» - это «удаленная ветвь». Это ваша ** локальная ** копия ветви 'master' на дистанционный пульт". Я думал, что это было далеко. Благодаря! – Zach

Смежные вопросы