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


426

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

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

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

Ответы:


875

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

git checkout -- filename

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

git reset HEAD filename
git checkout -- filename

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

git checkout origin/master filename

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

git reset --hard origin/master

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.