LINUX.ORG.RU

[git] можно ли изменить историю на сервере?


0

1

Приветствую! Вчера я сделал пост о том, как убил реп.
Лоровское коммьюнити меня неплохо просветило, в чём мои проблемы.
Но осталась одна принципиальная непонятка. Допустим есть сервер, на сервере реп, я на своей машине делаю следующее:
1. git clone {реп}
2. edit smth.
3. git commit -a
4. git push
...изменения прошли успешно...
...а теперь я понимаю, что жестоко ошибся с последним коммитом, и хочу удалить всю информацию о нём с удалённого сервера. Сделать так, как будто и не было этого коммита.
Я пытался провернуть это с помощью git reset --hard HEAD%{5} (мне надо было убить 5 последних коммитов), git pull. После этих команд в моём ЛОКАЛЬНОМ репе информации о 5-ти последних коммитах не осталось. Но с сервера-то она ни куда не исчезла! И когда я делаю коммит, потом захожу в Redmine (трекер моего проекта), то вижу в истории проекта наряду со свежими приятными изменениями те 5 уродливых коммитов, от которых я так хотел избавиться!

Подскажите, можно ли заставить реп на сервере забыть к чёрту про те 5 коммитов, чтобы и следа их в истории не осталось?

только если зайти на сервер и там их убить, по другому никак

Reset ★★★★★ ()

Делать надо revert. Не надо даже думать об удалении истории в общем репе.

anonymous ()
Ответ на: комментарий от anonymous

поддерживаю этого оратора.

Теоретически, можно сделать
git reset --hard HEAD^5
git push -f HEAD

но это зло

phoenix ★★★★ ()
Ответ на: комментарий от phoenix

Вот-вот! Я так и делал (на хабре прочитал), но с сервера история не удалилась.

Sergey_MSU ()
Ответ на: комментарий от Reset

>> только если зайти на сервер и там их убить, по другому никак

Но тогда почему ни в одном мануале я об этом не прочёл? Это ведь самое важное (если правда).

Sergey_MSU ()
Ответ на: комментарий от Sergey_MSU

что значит «не удалилась»? git log origin/master должен показывать новую историю. Сами коммиты останутся на сервере до тех пор, пока на них есть ссылки и не был сделан git gc

phoenix ★★★★ ()
Ответ на: комментарий от phoenix

>> что значит «не удалилась»?

Я до сих пор вижу в редмайне (вкладка Repositories) свои 5 неудачных коммитов. git log origin/master их не показывает, но мне от этого не легче.

Sergey_MSU ()

на локальном git push origin +master~:master и на сервер мастером становится предпоследний коммит

xorik ★★★★★ ()
Ответ на: комментарий от anonymous

Пройдите в сторону svn-сообщества, пожалуйста.

l5k ()
Ответ на: комментарий от anonymous

Поясню: править историю в общем репозитории, это явный признак кретинизма. Локально провить историю, жонглировать с rebase --- пожалуйста, для получения более красивой истории, для дальнейшего пуша — пожалуйста.

anonymous ()
Ответ на: комментарий от phoenix

Нет, он мониторит общий реп. Когда админ завёл новый реп заместо испорченного, редмайн показывал пустую историю.

Sergey_MSU ()
Ответ на: комментарий от xorik

>> на локальном git push origin +master~:master и на сервер мастером становится предпоследний коммит

Спасибо за рецепт. Возможно, это ответ на вопрос из сабжа (если история изменится на сервере). Но правильнее наверно сказать «HEAD'ом становится предпоследний коммит».

Sergey_MSU ()
Ответ на: комментарий от Sergey_MSU

Ты вообще знаешь, что такое HEAD?

И еще. Пожалуйста, скажи, что MSU в твоём нике не имеет отношение к МГУ

anonymous ()
Ответ на: комментарий от Sergey_MSU

>Но тогда почему ни в одном мануале я об этом не прочёл? Это ведь самое важное (если правда).

Тебе просто надо понять, что в случае dvcs на сервере стоит такой же репозиторий, как и у тебя. И если ты удалил дома через консоль, то таким же образом можешь сделать и там.

И мануалы тут не виноваты - про распределённость в них написано на первых страницах, причем не один раз.

anonymous ()

Сделать так, как будто и не было этого коммита

bad idea bro. лучше закрыть глаза, или отвернуться.

mi_estas ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.