Github дает мне количество коммитов на моей ветке.Могу ли я использовать это как часть аргументов git rebase -i? - PullRequest
0 голосов
/ 19 апреля 2019

Я не являюсь и никогда не буду экспертом git, поэтому будьте добры.

У меня есть пиар-ветка, в которой, как мне говорит Гитхуб, скажем, 12 коммитов.

Пока я работал над этим пиаром, я несколько раз сливал master (ветку, из которой он изначально расходился). Я планирую уничтожить все коммиты до одного, прежде чем этот PR будет принят и объединен.

Я знаю, что собираюсь использовать git rebase -i для этого. Общая область этого вопроса - как найти аргумент для этой команды.

Учитывая слияния из master в мою PR-ветку и т. Д. И т. Д., git merge-base не дает мне, я думаю, правильного SHA для предоставления в качестве аргумента git rebase -i. Фактически, это даст мне самый последний коммит, который «пришел» с master, вместо самого раннего момента, когда моя ветвь «началась».

Я, конечно, прочитал этот отличный ответ . Его ответ на «магию раковины» работает, но я не до конца понимаю, и мне не нравится полагаться на магию, я не понимаю.

Поэтому мой вопрос: из моей PR-ветви могу ли я вместо этого использовать эту сравнительно простую команду: git rebase -i HEAD~12, где 12 - это то, что Github говорит мне, это количество коммитов на моей ветке?

(конечно, я предполагаю, что я push отредактировал свою локальную ветвь для своей origin, т.е. моя локальная ветвь на моем ноутбуке идентична моей origin, размещенной на Github-хосте. В этом предположении подразумевается, что если Github сообщает 12 коммитов, то моя ветвь на моем ноутбуке также должна иметь ровно 12 коммитов.)

Это количество коммитов в порядке после тильды (~)? Это надежная, относительно легкая для ума вещь, которую можно сделать? Или я споткнусь о еще одном непостижимом git варианте или соглашении?

1 Ответ

1 голос
/ 19 апреля 2019

Я нашел этот замечательный пример , который точно отвечает на мой вопрос.В частности, он учитывает необходимость подсчета коммитов и определения хеша коммитов, который должен быть передан git rebase -i.В нем частично говорится:

Недостатком команды git rebase --interactive HEAD~[N] является то, что вам нужно угадать точное количество коммитов, подсчитывая их один за другим.К счастью, есть и другой способ:

git rebase --interactive [commit-hash]

Где [commit-hash] - это хэш коммита непосредственно перед первым, который вы хотите переписать с .Таким образом, в моем примере команда будет выглядеть так:

git rebase --interactive 6394dc

Где 6394dc равно Feature Y.Вы можете прочитать все это как:

Merge all my commits on top of commit [commit-hash].

Намного проще, не так ли?

Моя главная проблема - попытка найти [commit-hash].Теперь я знаю, что это не "мой", а тот, который предшествует моему.

...