Заставляя мерзавца забыть, я сделал что-нибудь с файлом - PullRequest
4 голосов
/ 19 августа 2011

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

Как мне попросить git получить последнюю версию этого файла из главной ветки (которую обновляли другие люди) и забыть тот факт, что моя ветка когда-либо касалась этого файла?

Ответы [ 2 ]

3 голосов
/ 19 августа 2011

Находясь в вашей ветке, вы можете извлечь файл из master:

git checkout master the_file

Подтвердить это изменение и затем найти sha1 коммита, где вы случайно изменили файл.И используйте

git rebase -i that_sha1

. Вы увидите список коммитов из вашей ветки, от самых старых до самых новых.Переместите последнюю строку (фиксацию, которую вы только что сделали) после первой строки (неверная фиксация) и измените pick на fixup.Это будет иметь тот же эффект, что и исправление неверного коммита, а затем перебазирование остальных коммитов поверх этого.

Все это предполагает, что вы не опубликовали свою ветку.Если вы сделали это, и у кого-то еще есть это сейчас, у вас проблемы.

1 голос
/ 19 августа 2011

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

git checkout origin/master <path_to_file>

Более продвинутым вариантом может быть использование git-filter-branch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...