Как переключиться на голову / ветку из другого репозитория git - PullRequest
0 голосов
/ 12 февраля 2012

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

  • A: рабочий Dir
  • B: рабочий Dir
  • C: базовый репо
  • D: рабочий каталог

Текущее состояние:

  • B был клонирован из A в некоторый момент, он разошелся (как и A)
  • B переведен вC, D клонируется из C, поэтому D является копией B

Теперь мне нужно, чтобы D было в том же состоянии, что и текущая ветвь в A, без изменений из B. ЧтоХотя я бы работал, это

A> git push D master:alternate
D> git pull
D> git checkout alternate

Но файлы все равно содержат изменения из B. Как получить ветку на D и рабочую копию, чтобы быть точной ревизией в A?

ПРИМЕЧАНИЕ. Каталог D не находится на той же машине и не может получить доступ к A или B напрямую, только через C.

Ответы [ 2 ]

0 голосов
/ 01 октября 2012

Ну, я не совсем понял, как вы управляете своим кодом, поэтому я снова перечислю вашу структуру. При запуске у вас есть ДВА рабочих хранилища, а C является хранилищем ORIGIN .

Вы создали B из A и работаете над ними обоими. У вас есть куча коммитов на A и B . Затем вы нажимаете B на ORIGIN (в данном случае C) и создаете ветку D из ORIGIN . Теперь вы хотите, чтобы изменения, которые вы сделали в A , были в D .

Ну, например, снимок этих веток совершенно другой. Я бы посоветовал вам переключиться на ветку D git checkout D и Черри выбрать коммиты с A git cherry-pick <commit-hash>

Сбор вишни - самый безопасный способ получения изменений кода из одной ветви в другую. Конечно, это также будет зависеть от того, сколько коммитов вы хотите получить в D . Если кода много, то имеет смысл перебазировать и объединить.

0 голосов
/ 12 февраля 2012

Если я понял это прямо, A и B не на "master".Если они разошлись, почему бы не создать для них разные ветви?И я действительно не понимал необходимость двух рабочих репозиториев на одном компьютере.Git справится с этим без необходимости репликации данных на вашем жестком диске.В этом и заключается прелесть управления версиями.

Тем не менее, я также не понимал, почему простое создание другой ветки не решит ее для вас.Если A и B различны, ПОЧЕМУ держите их в одной и той же «ветке»?

A> git checkout -b my_branch_A
A> git commit -a -m "whatever you have to commit"
A> git push D my_branch_A

D> git checkout origin/my_branch_A

Таким образом, у вас будет точно так же, как в репо A.

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