Git: есть ли способ сохранить результат сравнения двух веток? - PullRequest
0 голосов
/ 10 октября 2018

Мой вариант использования такой.У меня есть ветка prod (prod) и рабочая ветка (wip).По какой-то причине, которую я не хочу здесь уточнять, ветвь wip содержит слишком много commits (она была разветвлена ​​с более ранней точки, а затем слилась и разошлась и т. Д.).Чего я хочу добиться, так это просто изменить мою ветку wip на ветку prod, а затем, независимо от изменений, я просто ее спрятал.Затем я могу создать новую ветку и git stash pop, что даст мне намного более чистую историю журнала ветки.Есть ли простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Чего я хочу добиться, так это просто изменить мою ветку wip и ветку prod, а затем, при любых изменениях, я просто спрятал ее.Затем я могу создать новую ветку и вставить в нее git stash, что даст мне намного более чистую историю журнала веток.Есть ли простой способ сделать это?

Если я понимаю, вы хотите, чтобы ваша ветка wip была на вершине prod и имела более чистую историю.Вам не нужен тайник для этого.Вместо этого сделайте патч с git diff и примените его к новой ветви с git apply.

# Make a new wip branch from prod
git checkout -b new-wip prod

# Get the diff between prod and wip
git diff prod wip > wip.patch

# Apply the patch
git apply wip.patch

Затем удалите старую ветку и переименуйте новую.

git branch -D wip
git branch -m new-wip wip

Но в общем , когда вы хотите очистить историю, вы используете rebase.Во-первых, используйте rebase, чтобы переписать ветку wip, чтобы все ее изменения были поверх prod.

git checkout wip
git rebase prod

Это сгладит любые слияния или другие артефакты истории в wip.Теперь вы как будто записали все изменения в wip поверх самой последней версии prod.

Затем используйте «интерактивное перебазирование», чтобы изменить ветку wip кактебе нравится .Это может включать использование fix и squash для объединения нескольких изменений в одно.

# Interactively rewrite the changes since prod
git rebase -i prod

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

0 голосов
/ 10 октября 2018

Дай мне посмотреть, правильно ли я это понял.Вы хотели бы начать новую ветку, начиная с prod, в которой есть все изменения между wip и prod, и которую вы будете фиксировать как одну ревизию после prod, забыв о подробной истории wip?

Если это так,Я бы использовал сброс для этого:

git checkout -b new-wip wip # place new wip where old wip is
git reset --soft prod # set branch pointer where prod is

На этом этапе вы сможете коммитить, и вы получите ветку new-wip, которая имеет один коммит после prod и имеет дерево, точно такое же, как у старого-wip.

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