2010-01-19 2 views
43

Я сейчас в филиале 'foo'. Я просто побежал git merge master. Проблема только в том, что в foo есть определенный файл, который я хотел сохранить. Есть ли способ вернуть его, но сохранить все остальные изменения от мастера слияния?git восстановить один файл, который был удален во время слияния

+0

'git merge' не будет clobber файла, если он не изменился в рабочем дереве и не будет внесено изменение из другой ветви. Для большей ясности, слияние завершилось успешно, и вы хотите, чтобы старая версия из вашего филиала или возникли конфликты слиянием, и вы хотите, чтобы разрешенная версия выглядела как предыдущая версия вашего филиала? –

+0

Да, слияние было успешным. Мне нужна старая версия файла. – tybro0103

ответ

46

Попробуйте что-то вроде этого:

git checkout HEAD -- filename 

Это будет катиться ваш FileBack один коммит. Если вы хотите вернуться к определенной фиксации, вы можете использовать хеш фиксации или добавить^N в конец ключевого слова HEAD, например. HEAD^2.

+3

Или, если слияние еще не завершено (из-за конфликтов), просто git checkout filename. – paxos1977

+4

@ceretullis: если это связано с конфликтами в файле, о котором идет речь, вам понадобится 'git checkout --our filename'. –

+0

На самом деле я нашел это в другом месте, но использовал хеш-фиксацию вместо HEAD^1 ... спасибо! – tybro0103

0

Я не уверен, как исправить проблему из текущей ситуации, но вы можете посмотреть на git merge -s ours. Документы: here.

Рабочий процесс будет

  1. Создать филиал a из master
  2. ли пользовательские изменения в отрасли a, что вы не хотите сливаться обратно в master
  3. Выезд master и git merge -s ours a
  4. Проверьте a и продолжайте работать и совершать.

Теперь, когда вы сливаетесь с мастером, пользовательские изменения на шаге 2 будут проигнорированы.

+0

Документы здесь не более, к сожалению. ;) – poige

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