Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Инструменты разработчика _ Git. Как откатить удаленный репозиторий?

Автор: BRE 26.9.2010, 12:43

Камрады, подскажите. :)
Начал новый проект, решил в нем использовать git.

Вопрос следующий.
Есть удаленный репозиторий (лежит в общей папке).
Клонирую его в devel-папку.
Что-то добавил, сделал commit, сделал push.
Что-то добавил, сделал commit, сделал push.

В devel-репозитории могу жестко откатиться, выполнив:
$ git reset --hard <ревизия>

А вот как бы мне в удаленном откатиться. И что будет после этого с другим devel-репозиторием, там была создана другая ветка и в ней были коммиты?


Автор: Litkevich Yuriy 26.9.2010, 13:27

Цитата(BRE @ 26.9.2010, 16:43) *
В devel-репозитории могу жестко откатиться, выполнив:
$ git reset --hard <ревизия>
отправляй изменения, поставив галку "переписать существующую ветвь" Но это не нормальный режим

Цитата(BRE @ 26.9.2010, 16:43) *
И что будет после этого с другим devel-репозиторием, там была создана другая ветка и в ней были коммиты?
в другом хранилище просто придётся разруливать при слиянии. У каждого хранилища свои ветки

Цитата(BRE @ 26.9.2010, 16:43) *
Что-то добавил, сделал commit, сделал push.
Что-то добавил, сделал commit, сделал push.
вообще так не делается. Делается так:
1)создал ветвь от интерисующей ветви
2)Что-то изменил, сделал commit.
...
Что-то добавил, сделал commit.
3) Убедился что всё хорошо.
4) слил свою ветвь с исходной
5) отправил исходную ветвь в общее хранилище.

Автор: BRE 26.9.2010, 13:52

Цитата(Litkevich Yuriy @ 26.9.2010, 14:27) *
отправляй изменения, поставив галку "переписать существующую ветвь" Но это не нормальный режим

Эээ... А как будет в командной строке? :)

Цитата(Litkevich Yuriy @ 26.9.2010, 14:27) *
в другом хранилище просто придётся разруливать при слиянии. У каждого хранилища свои ветки

Т.е. можно будет слить, даже если откатимся до момента создания этой ветки?

Цитата(Litkevich Yuriy @ 26.9.2010, 14:27) *
вообще так не делается. Делается так:

Это штатный режим. :)
У меня получилось следующее. Разработка ведется на одной машине. Основная разработка происходит в linux, но к сожалению есть части которые будут доступны только в венде и их разработку приходиться делать в virtualbox'ой венде. Так вот я добавил класс в linux, сообразил, что его разработку нужно делать в венде (в linux сборка этого модуля отключена в конфигурации), с перепугу слил devel-ветку с master и сделал push, что бы я смог обновить вендовый devel-репозиторий.
Но в master остались файлы этого класса, я их убрал и опять закомител master.
А сейчас там две ривизии не к селу, не к городу:
* Убрали ClassName
* Добали ClassName
Вот и хочется от этого уйти. :)

Автор: Litkevich Yuriy 26.9.2010, 15:18

Цитата(BRE @ 26.9.2010, 17:52) *
А как будет в командной строке?
не знаю, читайте git help push, меня командная строка минимально интересует.
Цитата(BRE @ 26.9.2010, 17:52) *
Т.е. можно будет слить, даже если откатимся до момента создания этой ветки?
конечно, т.к. в локальном хранилище свои ветки
Цитата(BRE @ 26.9.2010, 17:52) *
с перепугу слил devel-ветку с master и сделал push, что бы я смог обновить вендовый devel-репозиторий.
надо было просто отправлять эту ветку, её бы вытянул в другом хранилище и слил как надо.
Цитата(BRE @ 26.9.2010, 17:52) *
А сейчас там две ривизии не к селу, не к городу:
* Убрали ClassName
* Добали ClassName
Вот и хочется от этого уйти.
не понял конечную цель

П.С. при любых сомнениях делай ветку от текущей, текущую сбрасывай в последнее состояние. Так у тебя будет заначка в виде допветки.
у меня в некоторых хранилищах повисших веток с десяток. Есть не просят - пусть живут

Автор: BRE 26.9.2010, 15:31

Цитата(Litkevich Yuriy @ 26.9.2010, 16:18) *
не понял конечную цель

Если смотреть лог, то выводится два комита:
26/09/10 09:10:00 * Убрали ClassName
26/09/10 09:00:00 * Добавили ClassName
25/09/10 22:00:00 * Важные изменения.
....

Одним комитом добавили, другим сразу убрали файлы для ClassName. И все это в master. Не эстетично, вот и хочу откатить master до "Важные изменения".

Цитата(Litkevich Yuriy @ 26.9.2010, 16:18) *
П.С. при любых сомнениях делай ветку от текущей, текущую сбрасывай в последнее состояние. Так у тебя будет заначка в виде допветки.
у меня в некоторых хранилищах повисших веток с десяток. Есть не просят - пусть живут

Нужно нарабатывать новые привычки. Ок, спасибо.

Автор: Litkevich Yuriy 26.9.2010, 18:17

Цитата(BRE @ 26.9.2010, 19:31) *
Одним комитом добавили, другим сразу убрали файлы для ClassName.
а нужно получить:
26/09/10 09:10:00 * Убрали ClassName
25/09/10 22:00:00 * Важные изменения.

Т.е. минус промежуточное? Ну в принципе почистить можно.
делаешь сейчас от мастера ветку, мастера сбрасываешь на - 26/09/10 09:10:00 * Убрали ClassName
делаешь копирование изменения (cherrypick) для состояния - 25/09/10 22:00:00 * Важные изменения.
тем самым в мастере получаешь:
26/09/10 09:10:00 * Убрали ClassName
25/09/10 22:00:00 * Важные изменения.

всё


П.С. всю эту процедуру (и особенно cherrypick) удобнее делать в GitTk

Автор: igor_bogomolov 26.9.2010, 18:19

Цитата(BRE @ 26.9.2010, 14:52) *
Эээ... А как будет в командной строке?
$ git reset --hard <ревизия>
$ git push --force
Цитата(Litkevich Yuriy @ 26.9.2010, 16:18) *
П.С. при любых сомнениях делай ветку от текущей, текущую сбрасывай в последнее состояние. Так у тебя будет заначка в виде допветки.
у меня в некоторых хранилищах повисших веток с десяток. Есть не просят - пусть живут
Зачем копить кучу не нужных веток. Иначе вывод git branch превратится в полотенце. Читать трудно, да и вообще приимуществ ни каких. После того как слил наработки в рабочую ветку, временный бранч нужно удалять

Автор: BRE 26.9.2010, 18:35

Цитата(igor_bogomolov @ 26.9.2010, 19:19) *
$ git reset --hard <ревизия>
$ git push --force

Спасибо.
Уже сделал. На --force сразу посмотрел, просто было страшновато, как он там все откатывать будет и что с ветками произойдет, но сделав копию bare-репозитория приступил к экспериментам. :)
Заодно немного разобрался с reset --soft/--hard.

Автор: Litkevich Yuriy 26.9.2010, 18:55

Цитата(igor_bogomolov @ 26.9.2010, 22:19) *
Иначе вывод git branch превратится в полотенце
а я его не далаю, консолью не пользуюсь, поэтому и проблем у меня нет

Цитата(igor_bogomolov @ 26.9.2010, 22:19) *
После того как слил наработки в рабочую ветку,
а кто сказал что я их слил?

Автор: igor_bogomolov 26.9.2010, 19:14

Цитата(Litkevich Yuriy @ 26.9.2010, 19:55) *
а я его не далаю, консолью не пользуюсь, поэтому и проблем у меня нет
Я наоборот, в основном пользуюсь только консолью. Изредка могу через креатор коммит сделать. Графическа оболочка гита так ни одна и не понравилась. Пользуюсь ими только если надо посмотреть "дерево" изменений.

Я за чистоту в проекте и репозитории. :)

Цитата(Litkevich Yuriy @ 26.9.2010, 19:55) *
а кто сказал что я их слил?
Тогда тем более зачем они тебе? Получается у тебя много заброшенных устаревших веток, функционал которых тебе не нужен

Автор: Litkevich Yuriy 26.9.2010, 20:12

Цитата(igor_bogomolov @ 26.9.2010, 23:14) *
функционал которых тебе не нужен
но может пригодится.
Была идея, отличная. В текущем окружении недоделок и косяков Qt её не удалось реализовать в короткое время.
Оставлена до лучших времён. Например, когда проект будет переносится на новую версию Qt.

Автор: igor_bogomolov 26.9.2010, 20:27

Для этого существуют системы управления проектами. У меня на работе, например, используется redmine.

Автор: Litkevich Yuriy 26.9.2010, 20:52

Цитата(igor_bogomolov @ 27.9.2010, 0:27) *
Для этого существуют системы управления проектами.
смысла не понял.

Автор: igor_bogomolov 26.9.2010, 22:15

Цитата(Litkevich Yuriy @ 26.9.2010, 21:52) *
смысла не понял.
Я вот про это
Цитата(Litkevich Yuriy @ 26.9.2010, 21:12) *
Была идея, отличная. В текущем окружении недоделок и косяков Qt её не удалось реализовать в короткое время.
Оставлена до лучших времён. Например, когда проект будет переносится на новую версию Qt.
ИМХО - это не затача гита. Это нужно и удобно делать при помощи "системы управления проектам". В них ты можешь назначить себе задачу, описать её, приложить код, если надо, файлы. Создать некий "оперативный план", т.е. описать в какой версии проекта или при каких условиях у тебя этот функционал должен быть реализован. Это наглядно, ты всегда можешь видеть, что тебе нужно сделать. И централизованно этим управлять, если у тебя проектов много.

Я понимаю, что "системы управления проектам" не предоставляет никаких автоматизированных средств для добавления кода в проект. Но и преимуществ гита в твоём подходе я не вижу. Ты имеешь много веток, которые очень отстали от основного проекта. Возможно структура проекта у тебя тоже уже давно изменилась. И вливать эти наработки в существующий проект будет тяжело. К тому же таким захламленным репозиторием просто труднее управлять. Со временем ты будешь забывать о существующих задачах, даже если у них вменяемый коментарий и навешан таг.

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

Автор: Litkevich Yuriy 27.9.2010, 9:17

Цитата(igor_bogomolov @ 27.9.2010, 2:15) *
ИМХО - это не затача гита. Это нужно и удобно делать при помощи "системы управления проектам".
при чём здесь управление проектом?
Пишу код, работаю в системе управления версиями. Раз грабля, два грабля, стоп, оставим до лучших времён. Переключаюсь к началу ветвления, делаю новую ветку.
Всё. Ни какая система управления проектами здесь ни к месту.

Автор: molchanoviv 27.9.2010, 21:49

Цитата(igor_bogomolov @ 26.9.2010, 20:14) *
Графическа оболочка гита так ни одна и не понравилась

а мне git gui понравился. Это тот который на tcl/tk

Автор: Litkevich Yuriy 28.9.2010, 10:41

Цитата(molchanoviv @ 28.9.2010, 1:49) *
а мне git gui понравился. Это тот который на tcl/tk
просто лучше нету. А вообще он дико кривой, как и весь tcl/tk. Переключи раскладку переключи раскладку на русскую, и стандартные кнопки копирования/вставки работать перестанут.

Автор: igor_bogomolov 28.9.2010, 12:59

Цитата(Litkevich Yuriy)
переключи раскладку на русскую, и стандартные кнопки копирования/вставки работать перестанут.
Проверил на том же git gui - копирование/вставка работают в обоих раскладках.

Автор: molchanoviv 28.9.2010, 18:08

Цитата(Litkevich Yuriy @ 28.9.2010, 11:41) *
А вообще он дико кривой, как и весь tcl/tk. Переключи раскладку переключи раскладку на русскую, и стандартные кнопки копирования/вставки работать перестанут.

Это чисто виндовая проблема. В лине все норм. А проблемы винды, шерифа, как говорится, не ...

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)