удалить несколько коммитов из нескольких объединенных ветвей - PullRequest
1 голос
/ 28 июня 2019

Кто-то дал мне репо для работы.Я предполагал, что это репо компании, и я по счастливой случайности начал создавать филиалы, а затем, наконец, объединил их в один, удалил временные филиалы и нажал.Сегодня он сообщил мне, что это его личное репо, поэтому было бы неплохо, если бы я мог удалить мой беспорядок из его репо.Я сохранил свою работу и переместил ее в новый репозиторий, но не знаю, как удалить коммиты, чтобы не «запятнать» его историю своим именем: D

 git reset --hard hislastcommitsha 

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

Я предполагаю, что они не удалены, потому что, хотя существует только одна ветвь (master), эти коммиты происходят из предыдущего слияния нескольких ветвей (ветки разработки и темы).

Могу ли я что-нибудь сделать, чтобы убрать мои коммиты / имя из его истории?

Очень ценится

1 Ответ

1 голос
/ 28 июня 2019

(Базовое предположение: у вас достаточно прав на репо, чтобы протолкнуть с помощью --force, потому что, наоборот, ваш друг, просящий вас что-нибудь почистить, был бы неудовлетворительным требованием)

Когда вы выдвигали ветку (master), git фактически выдвигал любые новые коммиты , которые были доступны через наследство, начиная с коммита, на который указывал ваш новый ref master в данный момент. .

Но когда вы изначально клонировали исходное хранилище, его собственная версия master указывала на коммит, который мы пытаемся восстановить сверху, hislastcommitsha

Так что вам нужно

# as you already guessed, rewind your version of master
git reset --hard hislastcommitsha

# then push it to his repo
git push --force origin master

Тем не менее, важное примечание : на этом этапе новые отправленные вами коммиты (ошибочно) не удаляются из его репо, они просто не ссылаются ни на одну ветку, поэтому они теперь являются кандидатами на сборку мусора. коллекция.

По этой причине вы все еще можете проверить их в своем локальном репо.

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

...