2016-09-14 7 views
0

Я хотел бы сделать некоторые улучшения для фрагмента кода, который я написал ранее. Поэтому я создал новую ветку git и изменил то, что я хотел изменить. Теперь, когда изменения завершены, я обнаружил, что моя новая версия не обязательно лучше, но просто отличается в первую очередь. Следовательно, я думаю, что лучше не просто объединять ветви и изменять исходный файл, делая это.
Вместо этого я хотел бы создать копию файла, который содержит новые функции, в то время как исходный файл остается нетронутым.
(Моя работа - это исследовательская работа, поэтому я хотел бы сравнить обе версии в действии позже.)git: Как перенести изменения в новый файл перед слиянием ветки?

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

, но я всегда хотел, чтобы узнать новые вещи, и мой метод выглядит немного neandertaler-иш ко мне, если вы знаете, что я имею в виду ...
Так что мой вопрос: Есть ли способ, чтобы сделать мерзавец сделать это для меня (возможно, слияния).

Спасибо! :)

+1

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

ответ

1

Вы можете оставить только feature и вернуться к master. Не обязательно объединять feature до master, прежде чем вы убедитесь, что обновление в порядке. Итак, теперь у вас есть как исходный файл, так и обновленный, отслеживаемый двумя разными ветвями.

Предполагается, что путь файла foo/bar.txt. Теперь вы находитесь на master. Если вы хотите иметь версию feature в той же папке, возможно, просто для сравнения. Вы можете просто запустить git cat-file -p feature:foo/bar.txt > feature_bar.txt. Точно так же, если вы сейчас находитесь на feature и хотите получить версию master, запустите git cat-file -p master:foo/bar.txt > master_bar.txt.

Git более новой версии поддерживает функцию worktree, что мы можем проверять различные версии на разные рабочие деревья. Если теперь вы находитесь на master, вы можете запустить git worktree add <another_path> feature, чтобы проверить файлы feature на номер <another_path>. Вы можете манипулировать master в текущем дереве работ и feature в <another_path>, поэтому вам не нужно переключаться между ветвями назад и вперед. Вместо этого откройте два окна оболочки, один для master, а другой для feature, так что вам не нужно переключаться между папками вперед и назад.

+0

'git cat-file' отлично работает для меня! Спасибо! – Turysaz

+0

@Turysaz p.s. ': foo/bar.txt' является более общим способом ссылки на конкретную версию. – ElpieKay

0
cp file file.new 
git checkout file 

Это должно позволить вам скопировать файл на новый и сохранить исходный файл.