У меня есть эти коммиты: (TL; DR ниже ...)Git: Скопировать цепочку фиксаций на какой-то другой не совершал, не ветви, участвующие в одной команде
A <- B <- C
Они находятся на вершине совершающие коллеги:
U <- V <- W <- A <- B <- C
Теперь коллега перебазировать его ветвь к новым master
, толкнул на GitHub репо, который обновил PR затем добавил коммит, толкнул GitHub репо, то я решил конфликты на GitHub и совершил в отрасль на github, то коллега раздавил t wo коммитов и добавил еще один, а затем наша команда вошла в игру и начала редактирование с помощью редактора github. Так что в конце концов, как это: [1]
X' <- A'' <- U -> C <- W -> B ---> L --> O --> O
<--- master' / | / <------ master
G ---------> M --/ \- abyssmal' <-- P --/
Другими словами, исходные ветви получили совершенно неуместной и новое положение вещей имеет очень мало общего с первоначальным состоянием. Я думаю, что никакая команда git, управляющая ветвями, не может действительно нацелиться на это использование. Я только хочу взять остатки моей работы (в виде нескольких последовательных коммитов) и попытаться адаптировать ее к сегодняшней кодовой базе.
Я пишу историю, потому что обычно люди пытаются предложить решения моей основной проблемы, что здорово, но я бы предпочел знать эту конкретную операцию, если у github есть средства для ее выполнения. Кроме того, я заявляю, что нет ветвей, потому что, когда мало кто работает на одной ветке, вещи становятся беспорядочными и ветвями теряют смысл. Отсутствие дисциплины или использование Git неправильным способом. Я знаю. Не решая этого, я буду доволен решением этого.
Все, что имеет значение для меня:
TL; DR:
Как скопировать любую цепочку фиксаций (при условии, что они прикованы) к какой-либо другой коммит, в одной команде? То есть У меня есть:
...hicSuntLeones <- myCommitA <- myCommitB <- myCommitC <- whatever...
Я хочу супер-простой команды:
git copyCommits --since myCommitA --until myCommitC --putThemTo terraInrecognita
Я хочу, чтобы в конечном итоге, как это:
...terraIncognita <- myCommitA' <- myCommitB' <- myCommitC'
С промежуточных конфликтов разрешающих конечно.
Я смотрел на git rebase --onto
, но это похоже на работу с иной логикой, что мне нужно - это позволит мне «развод» еще одна ветвь, но у меня нет этой ветви. Если я это правильно пойму.
Я просматриваю переполнение стека и сеть, но все еще не могу найти. Ответы git, как правило, объясняют, как работает git, how git rebase works, что такое contrast of the design philosophy of git with the philosophy of a more traditional source control tool like svn, как работает SCM вообще, как relationships with parents are important и прочим. Я не хочу звучать высокомерно, но я ищу команду, чтобы сделать выше. Есть ли? Спасибо :)
[1] Это не так уж плохо, просто нормальный ежедневный хаос. Но все же это делает этот подход более легким, чем мышление в ветвях.
Редактировать: Не дать ответ: Difference between 'rebase master' and 'rebase --onto master' from a branch derived from a branch of master Этот дублированный ссылка, также упоминаемая в вопросе, не отвечает на мой вопрос. Он имеет подробные ответы о том, как работает git, как работают ветки, но не дает ответа на мой вопрос. Возможно, это подразумевается там, но не дано.
Что о 'мерзавец --onto terraIncognita myCommitA^myCommitC'? Разве этого недостаточно? Конечно, имя 'myCommitC' - название ветки. – rodrigo
Нет ветвей, только фиксируется. Я мог бы создать временные ветви. Или, может быть, это может быть хеширование? –
Да, это также принимает хеши. – amenthes