Git: Лучший способ добавить только некоторые части файла из другой ветки? - PullRequest
6 голосов
/ 06 октября 2010

Допустим, у вас есть ветка master и другая ветка production, обе из которых содержат версию файла prog.py, а также множество других файлов. Представьте, что вы изменили много файлов в производственной ветке, включая prog.py. Теперь, как лучше всего применить только некоторые изменения, сделанные на prog.py в ветке production к его версии в master ветке?

Я начал переходить на ветку master и импортировать файл из ветки production:

git checkout master
git checkout production -- prog.py

потому что я надеялся, что смогу сделать git add -p и выбрать изменения вручную. Проблема в том, что prog.py находится как в рабочем дереве, так и в индексе. Как я могу удалить его из индекса, не касаясь рабочего дерева?

Или есть лучший способ выбрать, какие изменения в prog.py следует импортировать из ветви production в ветку master?

Ответы [ 3 ]

17 голосов
/ 18 декабря 2011

Я не уверен, правда ли это, когда задавался этот вопрос, но с текущей версией git вы можете сделать следующее:

git checkout -p production -- prog.py

, и вы получите тот же интерактивный инструмент, который вы используете для большинства -p команд.

4 голосов
/ 06 октября 2010

Выполнение небольших и гранулярных коммитов, которые выполняют только одну вещь, а затем последующий выбор изменений, которые вы также хотите внести в другую ветвь с использованием git cherry-pick $commit_id, может показаться разумным подходом.

1 голос
/ 06 октября 2010

Хорошо, я только что попробовал git reset, и он действительно удалил изменения, сохраненные в индексе. git add -p затем работает как положено, позволяя выбрать отдельные изменения, которые должны быть применены (то есть сохранены в индексе). Нежелательные изменения могут затем быть отклонены с помощью git commit, а затем git reset --hard.

Надеюсь, вопрос и этот ответ будут интересны кому-то еще! :)

PS: я пометил этот ответ как принятый, потому что он проверяет один файл, как было задано в исходном вопросе.

...