Подтвердить что ты не робот

Как заставить обновление при выполнении git pull?

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

то есть. он может снести мои локальные изменения.

4b9b3361

Ответ 1

Это должно сделать трюк:

git reset --hard HEAD
git pull

Ответ 2

git fetch
git checkout origin/name_of_branch  # correct state but in 'head without a name'
git checkout -B name_of_branch      # overwrite current tree onto name_of_branch

Это проверяет ветку удаленного отслеживания на голову без имени, тогда вы можете посмотреть и проверить, что вы счастливы. Всякий раз, когда вы захотите (даже после изменений или коммитов), второй git checkout называет ваше текущее дерево "name_of_branch", даже если для этого нужно удалить старое имя_обытия.


Изменить: "Какой сумасшедший синтаксис командной строки"

Синтаксис команд git кажется неинтуитивным. Фактически это модель данных git, которая неточна. Это неплохой дизайн, но потому, что он работает с файлами, ветвями, совершает действия, которые намного более гибкие и мощные, чем другие системы управления версиями. Как только вы почувствуете, как эти вещи работают в Git, командная строка будет иметь большой смысл, и вы сможете точно угадать, как делать сложные вещи.

  • git fetch Этот выбирает все обновления, которые произошли на сервере origin с момента последнего раза. Git отделяет выборку от сервера от обновления, слияния и т.д. любых ваших веток. Все ветки, называемые origin/XXX, являются вашими последними версиями того, что на сервере. Это не удаленные ветки, а удаленные ветки отслеживания, локальные ветки, которые отслеживают удаленные ветки. Когда вы выполняете git fetch, вы обновляете их, не касаясь каких-либо своих ветвей. Когда вы выполняете git merge, git rebase и т.д., Вы используете извлеченную версию, не захватывая более недавнюю копию с сервера. Это означает, что у вас есть контроль над выполнением сетевых запросов (если вы не всегда подключены к серверу), и вы можете "получить" снимок сервера, а затем объединить на досуге. Если есть сомнения, сначала сделайте git fetch.
  • git checkout origin/name_of_branch git checkout выполняет две вещи. Он обновляет ваши файлы в этой ветке и устанавливает ваш HEAD в эту ветку. Файлы - это то, что вы ожидаете. Элементы HEAD означают, что когда вы совершаете фиксации, они добавляются в конец ветки, на которую указывает HEAD. IOW, checkout выполняет оба вывода - записывает правильные версии файлов и готовится к вводу - готовится к хранению коммитов, которые вы собираетесь делать в нужном месте. Если вы проверите ветку с именем foo, ваше дерево изменится на состояние, сохраненное в foo, и, следующие коммиты будут добавлены в foo. В случае origin\xyz вы не можете записать свои изменения в ветку origin - это трек, который находится на сервере origin и не может быть передан напрямую. Таким образом, проверка обновляет файлы и устанавливает HEAD в нуль - неназванную ветвь. Это помешает вам случайно передать вновь извлеченные данные обратно в предыдущую ветку, которую вы использовали, и на самом деле вам будет не хватать git от фиксации вообще до тех пор, пока у вас нет ветки назначения.
  • git checkout -B name_of_branch Как обычно, , когда git выполняет две разные операции с одной командой, обе они могут быть настроены отдельно. Таким образом, вторая часть того, что checkout делает, устанавливая HEAD ветке, которую вы хотите зафиксировать, может быть для новой ветки вместо ветки, которую вы проверяете, если вы используете опцию -B. Таким образом, git checkout -B new_stuff old_stuff установит все ваши файлы в состояние в old_stuff, но вы готовы записать свои коммиты в новую ветвь new_stuff. Это обычная задача, и вы можете сэкономить время на разветвление ветки, а затем разбить ее в два этапа. Теперь почти все аргументы для команд git могут быть опущены, а git сделает наиболее очевидную вещь. В этом случае создается новая ветвь, основанная на том, на котором вы находитесь, а не на том, который вы хотите проверить. Таким образом, git берет неназванную ветку, в которой вы находитесь, и создает новую ветвь с именем name_of_branch, с которой вы можете начать совершать. Обратите внимание, что буква "B" в верхнем регистре означает "сила". Если вы использовали "-b" git, он отказался бы перезаписать уже существующую ветку. С "-B" он будет идти вперед и делать это без предупреждения или подтверждения.

Ответ 3

Решение go-to, knee-derk: git reset --hard origin/master

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

Команда более безопасная немного больнее печатать: git checkout -B master origin/master

Введите псевдонимы:

git config --global alias.become '!git checkout -B "$(git symbolic-ref --short HEAD)"'

В дальнейшем можно ввести: git become origin/master