Как навсегда отменить последние коммиты из git remote, но сохранить их в моем локальном хранилище? - PullRequest
0 голосов
/ 22 мая 2019

Я сделал git-репо (только главную ветку) с одним удаленным и одним локальным.Других пользователей, которые клонировали его, нет, но удаленный путь может быть клонирован несколькими пользователями.

Мой локальный клон находится на коммите № 17, и я выдвинул до фиксации № 12 на удаленном компьютере.Я пришел к выводу, что каждый коммит после # 6 не должен быть общим, а удаленный должен (на данный момент) оставаться на # 6.

Я не хочу терять все коммиты 1-17 и историю, но для того, чтобы сбросить пульт дистанционного управления, я понимаю, что я должен сначала сбросить локальный на # 6 и нажать -f это.Могу ли я сбросить пульт на # 6, оставаясь локально впереди в 17, чтобы, если кто-то клонирует пульт, он не мог видеть уязвимые коммиты?

Моя идея заключается в том, что мне нужно будет клонировать мойсначала локальный для другого локального, так что второй локальный сохраняет все 17 коммитов и историю перед выполнением сброса с последующим нажатием -f.Это как можно подойти к этой ситуации?

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Я рекомендую создать новую ветвь функций из вашего локального master, чтобы записывать коммиты до # 17. Затем сделайте полный сброс вашего локального master и принудительно нажмите:

# from local master
git branch feature
# now hard reset to commit #6
git reset --hard HEAD~10
# force push
git push --force origin master

Теперь локальная ветвь feature представляет предыдущее состояние вашей ветки master вплоть до фиксации # 17, тогда как локальная master находится на фиксации # 6 и синхронизируется с удаленной master.

0 голосов
/ 22 мая 2019

Итак, вы хотите отправить другую ветку, но у вас есть коммиты с удаленного компьютера в вашем локальном (частном) репо.

  1. Затем создайте новую ветку с состоянием этого удаленного, чтобы получить локальную копию этой ветки git branch <branch_name>
  2. Извлечь локальную ветвь, которую вы нажали, вернуться к истории, чтобы указать, что вы хотите сбросить или перебазировать git reset --hard
  3. Нажмите с флагом силы git force --push

Часть, в которой я не уверен, заключается в том, что новый локальный клон git, вероятно, все еще имеет такой же пульт в своих пультах - будет ли неверно затем оттуда пихать на пульт?

Я не уверен, о чем вы спрашиваете, но когда вы что-то выдвигали на пульт, то после вашего клона должен быть этот пульт - это нормально.

Кстати, помните:

Не перебрасывайте коммиты, которые существуют вне вашего репозитория, и люди могут основываться на них.Если вы будете следовать этому принципу, все будет в порядке.Если вы этого не сделаете, люди будут ненавидеть вас, и вас будут презирать друзья и семья.

...