TL; DR - это то, что вы выдвинули противоречивые требования. Вы не можете получить то, о чем просили.
История в любом репозитории Git - это просто набор коммитов в репозитории с их встроенными связями.
Имена ветвей в любой Git репозиторий - это имена для last коммитов в длинных цепочках коммитов. Это все, что они есть. Они на самом деле не существуют сами по себе: они зависят от коммитов. Им нужны коммиты, чтобы просто существовать. Вы не можете иметь имя ветки без коммита.
Фиксирует , если в целом относятся друг к другу. Если у вас sh будет три разных имени ветви, указывающих на три разных коммита, эти три коммита должны как-то относиться . Чтобы они могли быть связаны, у вас должно быть одно из следующих свойств:
- коммиты являются прямыми родителями / потомками друг друга, так что это их история; или
- коммиты имеют общих предков, то есть историю.
Ответ Микаэля Б. показывает, как взять любой существующий коммит и сделать новый коммит от него, с новым коммитом, у которого нет родитель вообще. То есть новый коммит - это root коммит . Вы можете сделать это для каждого из трех имен веток, но в результате вы получите три несвязанных коммитов. Это означает, что вы не сможете объединить работу, выполненную в любой из этих трех ветвей, с работой, выполненной в любой другой ветке. У каждой ветви есть история: просто ее история состоит из одного коммита (т. Е. Какова длина длинной цепочки).
Если все в порядке, просто повторите его ответ три раза (три * 1033). * операции). Если нет, найдите подходящий коммит-предок и сделайте его сначала, как свою новую ветку --orphan
, затем добавьте три других коммита поверх этого, возможно, так:
o--o <-- original-branch2
/
...--o--...--o--o <-- original-master
\
o--...--o <-- original-branch1
o <-- new-orphan
\
o <-- new-branch1
\
o <-- new-branch2
\
o <-- new-master
или вот так:
o <-- new-branch1
/
o <-- new-orphan
\___
\ `o <-- new-master
\
o <-- new-branch2
например.