git: нужна помощь. (надеюсь я таки ничего не запорол :))

IDE, VCS и прочее

Модератор: Модераторы разделов

Ответить
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

git: нужна помощь.

Сообщение MakkyWelly »

Такие дела - была ветка 1 и ветка 2, первая основная. Был понедельник. Во вторник - забыл переключится в основную и сделал кучу всего во второй, вместо того, чтобы просто отменить коммит зачем-то переключился на 1 ветку и объединился со 2... Ну и в довершения маразма, желая разделить ветки обратно выполнил

Код: Выделить всё

git reset --hard HEAD^


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

Код: Выделить всё

error: Untracked working tree file 'файлы из второй ветки' would be overwritten by merge.


grep по директории .git не обнаруживает следов потеряного материала. Как быть?

---- add on ----

Неужели git * может физически менять фалы? Я думал он только свой индекс меняет.
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали:
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

Re: git: нужна помощь.

Сообщение MakkyWelly »

Всё ясно - "ещё один чувак обломался с --hard" :) Ладно, перепешу ещё раз.
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: git: нужна помощь.

Сообщение Red User »

MakkyWelly писал(а):
31.03.2010 01:07
Во вторую ветку переключится не могу

Можно закоммитить всё содержимое

Код: Выделить всё

git commit -a

или потереть всё незакоммиченное

Код: Выделить всё

git checkout -f

и после этого переключиться.
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

Re: git: нужна помощь.

Сообщение MakkyWelly »

Ну это понятно, просто ключ --хард окончательно и бесповоротно меняет дерево репозитория - ничего востановить уже будет нельзя. Уже переписал снова, но всё равно обидно ))
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: git: нужна помощь.

Сообщение Red User »

MakkyWelly писал(а):
01.04.2010 23:06
Ну это понятно, просто ключ --хард окончательно и бесповоротно меняет дерево репозитория - ничего востановить уже будет нельзя. Уже переписал снова, но всё равно обидно ))

Дерево меняется, а вот гитовские объекты остаются:

Код: Выделить всё

$ git show | head -1
commit ebb35eb85ba2f40530814b4e88efdd30665353f4
$ git reset --hard HEAD^
HEAD is now at 1a2daf4 Remove OK.
$ git show | head -1
commit 1a2daf45224ab69c21b31918f4d63673d6554caf
$ git reset --hard HEAD@{1}
HEAD is now at ebb35eb Change k.
$ git show | head -1
commit ebb35eb85ba2f40530814b4e88efdd30665353f4

Есть ещё такая полезная штука:

Код: Выделить всё

git log --walk-reflogs

А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

Re: git: нужна помощь.

Сообщение MakkyWelly »

Ну вот, а я уже удалил тот репозиторий, так что попробовать не могу. В .git есть такие файлы .pack к которым можно применить git unpack-objects, только это не помогло, но наверное именно в них архивируется удалённый материал. Вообще в одной статье видел утверждение, что reset с ключом --hard предназначен для удаления коммита так, чтобы его нельзя было востановить (конечно, прочитал это уже после той своей ошибки :) выходит это не так?
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: git: нужна помощь.

Сообщение sash-kan »

неиспользуемые объекты удаляются только garbage collect-ом (man git-gc).
а коммиты — это всего лишь «симлинки» (говоря nix-овым языком).

отмена reset-а вот тут коротко и ясно описана: http://stackoverflow.com/questions/5473/un...eset-hard-head1
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Ответить