Могу я сказать git pull перезаписать вместо слияния? - PullRequest
27 голосов
/ 19 апреля 2010

Насколько я вижу, git pull someRemote master пытается объединить удаленную ветку с моей.

Есть ли способ сказать "Полностью откажись от моих вещей, просто сделай меня еще одним клоном пульта", используя git pull? Я все еще хочу сохранить свой собственный репозиторий и сохранить его историю, но я хочу иметь копию 1: 1 основной ветки someRemote после этой команды.

Для пояснения, представьте, что есть 2 хранилища, RM и MY. Числа являются коммитами, и это предполагает только одну ветвь (master).

RM1 --- RM2 --- RM3 --- RM4 --- RM5 --- RM6 ...
|                        |
+-> MY1 --- MY2 --- MY3 -+-> MY4 --- MY5 --- MY6 ...

Итак, я запускаю свой собственный репозиторий как клон RM1. Потом я радостно развиваюсь, а RM развивается счастливо, но мы никогда не делимся своей работой После MY3 я понимаю, что моя ветвь не так хороша, но RM4 довольно хорош. Так что я хочу git pull RM4 в МОЙ. Однако я не хочу, чтобы мои изменения в MY1-3 сохранялись, я хочу, чтобы MY4 была копией RM4 в формате 1: 1.

Однако я хочу сохранить свою историю, в идеале я хотел бы, чтобы изменение было установлено между MY3 и RM4 или между MY3 и RM2-4.

Это должно остаться в моем хранилище.

Это возможно?

(Это для проектов GitHub, где я могу раскошелиться на проект, немного поэкспериментировать, оставить его в покое на несколько недель, но затем захотеть обновить его, не сохраняя изменений. В данный момент я удаляю свой форк и повторный форк что не лучший подход.)

Ответы [ 3 ]

33 голосов
/ 19 апреля 2010

Сначала переименуйте вашу основную ветку на что-то другое:

git branch -m master my_old_master

Затем создайте новый мастер:

git checkout -b master someRemote

Самое замечательное в именах веток Git заключается в том, что они сами по себе не являются местами, они просто указатели на места (где "место" - это идентификатор коммита SHA1).

4 голосов
/ 19 апреля 2010

Звучит так, будто вы после git checkout, который отменит ваши локальные изменения в пути.

Вы можете отменить изменения, используя оформить заказ:

git checkout myfile.h

восстановит myfile.h из индекса

http://git -scm.com / документы / ГИТ-контроль

2 голосов
/ 19 апреля 2010

Если вы хотите сохранить текущую основную ветку, но зарегистрировать новую версию (зеркальное отображение удаленной ветви), вы можете;

  • зарегистрировать драйвер фильтра слияния (только для этого слияния: a keepTheir one )
  • сделать git pull --no-commit
  • проверить, нет ли лишних файлов, которые нужно удалить (файлы на вашем мастере, которых не было в удаленной ветке)
  • совершить
...