Перемещение репо без перемещения его истории - PullRequest
2 голосов
/ 27 апреля 2020

У меня есть репо с некоторой историей, и я хотел бы взять это репо и перенести его на другой аккаунт github.

Какой хороший способ выполнить sh это без взятия любой истории со мной, так как я хотел бы установить это новое местоположение как совершенно новое репо (без какой-либо истории) с текущим кодом из исходного репо.

Кроме того, у меня есть несколько веток в оригинальном репо, которые Я также хотел бы перейти к новому репо без какой-либо истории, связанной с ними.

Таким образом, мое новое репо будет иметь мастер плюс две другие ветви и не будет иметь никакой истории, связанной с какими-либо ветками.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Сначала создайте ветку orphan и сделайте на ней свой первый коммит

git checkout --orphan name_of_the_orphan_branch
git commit

Первый коммит, сделанный в этой новой ветке, не будет иметь родителей и будет root новой истории, полностью отключенной от всех других веток и коммитов.

Затем добавьте новый пульт в ваш репозиторий

git remote add remote_name remote_url

Затем pu sh ваш новый филиалы к вашему новому пульту

git push remote_name name_of_the_orphan_branch
1 голос
/ 27 апреля 2020

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

например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...