Является ли моя интуиция о том, как ребаз работает правильно? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть филиал, который получил извлечение от мастера некоторое время 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!
...