Как вернуться к версии файла основной ветки источника

426

Я нахожусь в главной ветке моего локального компьютера клонированной главной ветки репо с удаленного сервера.

Я обновил файл и хочу вернуться к исходной версии из удаленной главной ветки.

Как я могу это сделать?

mrblah
источник

Ответы:

875

Если вы не зафиксировали файл или не добавили его в индекс, то:

git checkout -- filename

Предполагая, что вы добавили его в индекс, но не зафиксировали его, тогда:

git reset HEAD filename
git checkout -- filename

Предполагая, что вы это сделали, тогда:

git checkout origin/master filename

Предполагая, что вы хотите удалить все коммиты из вашей ветки (ОЧЕНЬ ДЕСТРУКТИВНО):

git reset --hard origin/master
gahooa
источник
43
Ваш третий вариант сильно отличается от ваших первых двух вариантов тем, что он касается всех файлов, а не только одного файла. Вы можете указать это более явно. Также почему бы не порекомендовать git checkout HEAD filenameи git checkout origin/master filenameдля вариантов один и два, это было бы более последовательным?
CB Bailey
5
@CharlesBailey: я добавил git checkout origin/master filenameопцию в ответ на gahooa.
Фрэнк
2
@cilphex сносит все коммиты в вашей текущей ветке
WattsInABox
1
Я случайно перебазировал ответвление A от ответвления B, и мне нужно было выполнить сброс, чтобы установить локальный филиал. git reset --hard masterОдно было моим решением, так как я не хотел связываться с источником. Спасибо.
Тако
3
@gahooa Вероятно, это должен быть git checkout - имя файла, что если файл называется «master», то вы получите поведение, которое не было предназначено.
user2602152
50

Я столкнулся с той же проблемой и столкнулся с этой темой, но моя проблема была с upstream. Ниже команда git работает для меня.

Синтаксис

git checkout {имя-удаленного} / {branch} - {file / path.js}

пример

git checkout upstream / development - public / js / index.js

Venkat.R
источник
0

Если вы еще не добавили его в ветку master, это просто:

  • сойти с мастер ветки (вроде git checkout -b oops/fluke/dang)
  • зафиксировать ваши изменения там (как git add -u; git commit;)
  • вернуться в главную ветку (вроде git checkout master)

Ваши изменения будут сохранены в ветке oops / fluke / dang; мастер будет как был.

commonpike
источник