Git объединить, но отменить все локальные изменения - PullRequest
1 голос
/ 04 июня 2019

У меня есть ситуация, когда у меня есть две ветви. Филиал good и филиал bad. Я хочу сделать что-то вроде слияния. Но слияние не совсем верно. По сути, я хочу быть в плохой ветке и хочу, чтобы файлы в плохой ветке стали копией или клоном файлов в хорошей ветке. Я хочу выполнить какое-то слияние, чтобы все файлы в плохой ветке стали идентичны файлам в хорошей ветке. Но история не должна быть перепутана. Это должен быть просто один новый коммит поверх истории из bad.

Я пытался

git checkout bad
git merge -X theirs good

Но это не совсем правильно, это предотвращает некоторые изменения. Я могу это исправить, выполнив

git diff bad good

И вручную удаляя все различия. По сути, я продолжаю удалять вещи, пока разница не станет пустой. Затем операция завершается, и ветвь bad теперь идентична ветке good. Конечно, должен быть лучший способ? Я хочу выполнить слияние, когда оно просто полностью копирует файлы других веток, а не объединяет их.

Любая помощь будет оценена. Я пытался найти такие вещи, как copy other branch git, но ничего не похоже.

Ответы [ 3 ]

3 голосов
/ 04 июня 2019
git checkout bad
git reset --hard good

Это делает bad точкой при том же коммите, что и good, то есть они будут абсолютно идентичны.bad будет буквально копией good, как по содержанию , так и по истории .

2 голосов
/ 04 июня 2019

Проблема (если вы хотите назвать это так) при выполнении git reset --hard заключается в том, что вы не просто устанавливаете файлы, как в другой ветке ... вы устанавливаете все похоже на другую ветку ... и это также охватывает историю плохой ветви. Если вы хотите сохранить плохую историю и иметь новую ревизию, где все будет выглядеть хорошо на хорошей ветке, то это поможет:

git checkout --detach good
git reset --soft bad # moving HEAD to bad, but all files will stay as they are in good, all differences will be on index, ready to be committed
git commit -m "New revision, everything is like it is on good branch"
git branch -f bad # move bad branch pointer to new revision
git checkout bad

Но все зависит от того, если выхотите вести плохую историю веток или нет.

1 голос
/ 05 июня 2019
git reset --hard good       # set work tree, index and parent
git reset --soft bad        # undo the parent switch
git commit

или

git read-tree -um good      # set work tree and index
git commit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...