Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?
Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека.
Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку?
Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.
Здравствуйте, Artem Korneev, Вы писали:
AK>Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека. AK>Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку? AK>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.
Эээ...
Зачем куда-то что-то перекидывать?
Если речь о случайном amend вместо нового коммита, то git reflog показывает id коммита перед ошибкой, его можно сразу вытащить обратно. (Удобнее всего через git checkout -B $current_branch $commit_id.)
Сразу замечу к слову — git reflog по умолчанию показывает однострочно, но через git reflog --pretty=short, git reflog -p и т.д. — можно менять показ на нужный (аналогично git log).
Если наоборот, то через interactive rebase и подкоманды squash/fixup такой случайно отдельный коммит объединяется с предшественником.
По исходному вопросу — штатно такого не знаю, но написать алиас или даже отдельную команду, которая анализирует ситуацию, и выбирает действие — должно быть достаточно просто.
Думаю, никто этим не заботится именно потому, что восстановление тривиально.
Здравствуйте, Artem Korneev, Вы писали:
AK>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?
AFAIK, нет такого. IMHO, достаточно просто осознавать, что делаешь. Не коммитить подшофе, то есть
Здравствуйте, Artem Korneev, Вы писали:
AK>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?
AK>Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека. AK>Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку? AK>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.
--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, Artem Korneev, Вы писали:
AK>>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?
AK>>Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека. AK>>Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку? AK>>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.
DR>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.
Для исправления ошибок есть --fixup, а --amend для добавления забытого.
Здравствуйте, Artem Korneev, Вы писали:
AK>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?
AK>Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека. AK>Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку? AK>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.
Я, когда работаю в личной ветке, комичу всё без разбора, стараясь делать логически атомарные записи. Когда подходит к концу работы просто выполняю git rebase -i и всё подчищаю. Очень удобно совмещать с git commit --fixup, тогда при должных настройках все коммиты с --fixup перемещаются в нужные позиции.
Здравствуйте, mbait, Вы писали:
AK>>>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит. DR>>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый. M>Для исправления ошибок есть --fixup, а --amend для добавления забытого.
Никакой разницы, если они потом всё равно будут прилиты в базовый коммит для этой правки.
Но --fixup требует отдельного rebase-прохода, что не нужно, если уверен, что можно долить в предыдущий.
Здравствуйте, bnk, Вы писали:
AK>>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?
bnk>AFAIK, нет такого. IMHO, достаточно просто осознавать, что делаешь. Не коммитить подшофе, то есть
Я пьяным не работаю, но ошибки такого рода периодически случаются. Просто надо не пугаться и помнить, что вся история таких промежуточных движений хранится последние несколько дней.
Здравствуйте, aik, Вы писали:
aik>Здравствуйте, netch80, Вы писали:
N>>вся история таких промежуточных движений хранится последние несколько дней.
aik>Это только если сборщик мусора включён (а я сам запускаю "git gc" по большим праздникам), а так то куда оно денется?
Подразумевался режим по умолчанию (30 суток на expire-unreachable). Конечно, настройки тут можно выкрутить в любую сторону...
git gc запускается с --auto на много операций, и оно может само решать "а тут у вас таки накопилось, давайте проведём GC".
Здравствуйте, netch80, Вы писали:
N>Подразумевался режим по умолчанию (30 суток на expire-unreachable). Конечно, настройки тут можно выкрутить в любую сторону...
Ну, я имел ввиду что "тайный индейский способ" — это выключить автоматический gc к чертям, и восстанавливаться через git reflog, который ничего не забудет.
Здравствуйте, aik, Вы писали:
aik>Здравствуйте, netch80, Вы писали:
N>>Подразумевался режим по умолчанию (30 суток на expire-unreachable). Конечно, настройки тут можно выкрутить в любую сторону...
aik>Ну, я имел ввиду что "тайный индейский способ" — это выключить автоматический gc к чертям, и восстанавливаться через git reflog, который ничего не забудет.
OK, только я слабо представляю себе того, кому надо восстанавливаться через reflog более чем через 30 дней... на практике это и так откровенно дофига, можно из отпуска успеть вернуться.
Здравствуйте, mbait, Вы писали:
DR>>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.
M>Для исправления ошибок есть --fixup, а --amend для добавления забытого.
Amend используется для исправления предыдущего коммита или более старого через interactive rebase. Fixup/autosquash — это просто альтернативный процесс для тех, кто старые коммиты правит часто.
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, mbait, Вы писали:
DR>>>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.
M>>Для исправления ошибок есть --fixup, а --amend для добавления забытого.
DR>Amend используется для исправления предыдущего коммита или более старого через interactive rebase. Fixup/autosquash — это просто альтернативный процесс для тех, кто старые коммиты правит часто.
Я хотел сказать, что --fixup получается ближе к тому, что хочет ТС, потому что не затирает HEAD и позволяет "опомниться"
Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека.
Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку?