Git показать разницу между одним файлом на 2 ветки, чтобы сделать их равными - PullRequest
1 голос
/ 11 марта 2020

У меня один и тот же файл на development_branch и на ветке master. Правильная версия файла находится в development_branch, а версия в основной ветке очень устарела.

Я точно знаю, что версия в development_branch точна на 100%, и я мог бы просто заменить файл в основной ветке, чтобы 1: 1, но я хочу сохранить историю коммитов, поэтому есть ли способ получить коммиты из development_branch, которые не находятся в основной ветке, чтобы легко сделать их равными?

Были некоторые конфликты при объединении и некоторые из них, возможно, были решены неправильно, в неправильном порядке, было много модификаций и т. д. c. Я хочу получить точный файл, который у меня есть на development_branch в качестве вывода.

Любые подсказки?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Я точно знаю, что версия на development_branch точна на 100%, и я мог бы просто заменить файл в основной ветке на 1: 1, но я хочу сохранить историю коммитов ...

В репозитории Git существует только один вид истории, и эта история - это набор коммитов в репозитории.

Добавление новых коммитов в репозиторий не приводит к изменению существующих коммитов. в хранилище. Буквально не может изменить их.

Следовательно, все, что вам нужно сделать в этом случае, это извлечь желаемое содержимое из коммита, в котором они есть, записать их в свой индекс (где * 1025) * создает следующий коммит, чтобы сделать), и сделать новый коммит. Для этого:

# git checkout master  # if needed - but you're already there
git checkout development_branch -- path/to/file

и теперь вы должны быть готовы git commit к обновленному файлу (используйте git status, git diff --cached, et c., Чтобы убедиться).

(В Git 2.23 или более поздней версии вы можете использовать git restore вместо git checkout -for-a-single-file. Командная строка, которую вы вводите, длиннее, но операция понятнее: цель состоит в том, чтобы извлечь данный файл из данного коммита, записав его и в индекс, и в рабочее дерево.)

0 голосов
/ 11 марта 2020

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

git merge  --no-commit develop
git checkout develop -- PATH_TO_FILE
git commit
...