У меня есть филиал, который получил извлечение от мастера некоторое время go. Моя ветвь претерпела много ре-факторинга, то есть пробовала разные подходы в разных коммитах, но теперь готова к объединению. В то же время, некоторые коммиты были объединены в мастер. Поэтому мне нужно сделать ребаз. Однако перебазировка оказывается очень трудной, потому что у меня есть много коммитов, которые перезаписывают друг друга. Например, прогресс работы может выглядеть следующим образом:
Мастер:
original line
Промежуточный коммит
original line
intermediate modification
Конечный коммит
original line
correct modification
Когда я перебазирую, git заставляет меня выбирать, хочу ли я intermediate modification
или correct modification
. Очевидно, я хочу correct modification
!
Кажется, что rebase выполняет следующее
current = master
for commit in commits
if conflict(current, commit)
Error("Conflict")
else
current = merge(current, commit)
end
end
То есть каждый новый коммит оценивается по «текущей» базе, которая включает в себя промежуточные коммиты в моем пиаре.
Я просто хочу проверить, не конфликтует ли мой последний коммит с master
. Меня не волнуют промежуточные попытки.
Я пробовал git rebase -i master
, но даже если я установил все, кроме первого, принимающего squash
, это все равно заставляет меня работать через каждый конфликт. Возможно, я что-то упустил в документации git rebase -i
. Моя текущая предлагаемая стратегия -
git checkout feature # this branch
git reset --soft <commit I diverged from>
git stash
git checkout master
git checkout -b temp_branch
git stash pop # will have to resolve conflicts in two lines. It's nbd.
git commit -am "Squash everything"
git checkout feature
git reset --hard temp_branch # scary!