git commit --amend
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 09.11.18 19:57
Оценка:
Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?

Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека.
Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку?
Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.
С уважением, Artem Korneev.
Отредактировано 09.11.2018 19:58 Artem Korneev . Предыдущая версия .
Re: git commit --amend
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 09.11.18 20:03
Оценка: 7 (2) +1
Здравствуйте, 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 такой случайно отдельный коммит объединяется с предшественником.

По исходному вопросу — штатно такого не знаю, но написать алиас или даже отдельную команду, которая анализирует ситуацию, и выбирает действие — должно быть достаточно просто.
Думаю, никто этим не заботится именно потому, что восстановление тривиально.
The God is real, unless declared integer.
Отредактировано 10.11.2018 7:30 netch80 . Предыдущая версия . Еще …
Отредактировано 10.11.2018 7:27 netch80 . Предыдущая версия .
Re: git commit --amend
От: bnk СССР http://unmanagedvisio.com/
Дата: 09.11.18 20:19
Оценка: +2 :))
Здравствуйте, Artem Korneev, Вы писали:

AK>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?


AFAIK, нет такого. IMHO, достаточно просто осознавать, что делаешь. Не коммитить подшофе, то есть
Отредактировано 09.11.2018 20:20 bnk . Предыдущая версия .
Re: git commit --amend
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 10.11.18 02:50
Оценка: 3 (1)
Здравствуйте, Artem Korneev, Вы писали:

AK>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?


AK>Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека.

AK>Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку?
AK>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.

--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.
Ce n'est que pour vous dire ce que je vous dis.
Отредактировано 10.11.2018 2:58 Don Reba . Предыдущая версия .
Re[2]: git commit --amend
От: mbait  
Дата: 10.11.18 03:59
Оценка: 5 (2)
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, Artem Korneev, Вы писали:


AK>>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?


AK>>Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека.

AK>>Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку?
AK>>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.

DR>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.


Для исправления ошибок есть --fixup, а --amend для добавления забытого.
Re: git commit --amend
От: mbait  
Дата: 10.11.18 04:02
Оценка: 3 (1) +6
Здравствуйте, Artem Korneev, Вы писали:

AK>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?


AK>Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека.

AK>Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку?
AK>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.

Я, когда работаю в личной ветке, комичу всё без разбора, стараясь делать логически атомарные записи. Когда подходит к концу работы просто выполняю git rebase -i и всё подчищаю. Очень удобно совмещать с git commit --fixup, тогда при должных настройках все коммиты с --fixup перемещаются в нужные позиции.

Очень рекоменду прочитать Pro Git.
Re[3]: git commit --amend
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.11.18 07:06
Оценка:
Здравствуйте, mbait, Вы писали:

AK>>>Не то чтоб прям это часто случалось, но все равно надоедает. Пару раз в полгода приходится вручную перекидывать все в staging и пересоздавать коммит.

DR>>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.
M>Для исправления ошибок есть --fixup, а --amend для добавления забытого.

Никакой разницы, если они потом всё равно будут прилиты в базовый коммит для этой правки.
Но --fixup требует отдельного rebase-прохода, что не нужно, если уверен, что можно долить в предыдущий.
The God is real, unless declared integer.
Re[2]: git commit --amend
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.11.18 07:33
Оценка:
Здравствуйте, bnk, Вы писали:

AK>>Коллеги, а подскажите, есть ли какой-нибудь тайный индейский способ не путать, когда нужно делать git commit, а когда git commit --amend?


bnk>AFAIK, нет такого. IMHO, достаточно просто осознавать, что делаешь. Не коммитить подшофе, то есть


Я пьяным не работаю, но ошибки такого рода периодически случаются. Просто надо не пугаться и помнить, что вся история таких промежуточных движений хранится последние несколько дней.
The God is real, unless declared integer.
Re[3]: git commit --amend
От: aik Австралия  
Дата: 10.11.18 09:21
Оценка:
Здравствуйте, netch80, Вы писали:

N>вся история таких промежуточных движений хранится последние несколько дней.


Это только если сборщик мусора включён (а я сам запускаю "git gc" по большим праздникам), а так то куда оно денется?
Re[4]: git commit --amend
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.11.18 11:00
Оценка:
Здравствуйте, aik, Вы писали:

aik>Здравствуйте, netch80, Вы писали:


N>>вся история таких промежуточных движений хранится последние несколько дней.


aik>Это только если сборщик мусора включён (а я сам запускаю "git gc" по большим праздникам), а так то куда оно денется?


Подразумевался режим по умолчанию (30 суток на expire-unreachable). Конечно, настройки тут можно выкрутить в любую сторону...

git gc запускается с --auto на много операций, и оно может само решать "а тут у вас таки накопилось, давайте проведём GC".
The God is real, unless declared integer.
Re[5]: git commit --amend
От: aik Австралия  
Дата: 10.11.18 11:10
Оценка:
Здравствуйте, netch80, Вы писали:

N>Подразумевался режим по умолчанию (30 суток на expire-unreachable). Конечно, настройки тут можно выкрутить в любую сторону...


Ну, я имел ввиду что "тайный индейский способ" — это выключить автоматический gc к чертям, и восстанавливаться через git reflog, который ничего не забудет.
Re[6]: git commit --amend
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 10.11.18 11:13
Оценка:
Здравствуйте, aik, Вы писали:

aik>Здравствуйте, netch80, Вы писали:


N>>Подразумевался режим по умолчанию (30 суток на expire-unreachable). Конечно, настройки тут можно выкрутить в любую сторону...


aik>Ну, я имел ввиду что "тайный индейский способ" — это выключить автоматический gc к чертям, и восстанавливаться через git reflog, который ничего не забудет.


OK, только я слабо представляю себе того, кому надо восстанавливаться через reflog более чем через 30 дней... на практике это и так откровенно дофига, можно из отпуска успеть вернуться.
The God is real, unless declared integer.
Re[3]: git commit --amend
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 10.11.18 11:36
Оценка:
Здравствуйте, mbait, Вы писали:

DR>>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.


M>Для исправления ошибок есть --fixup, а --amend для добавления забытого.


Amend используется для исправления предыдущего коммита или более старого через interactive rebase. Fixup/autosquash — это просто альтернативный процесс для тех, кто старые коммиты правит часто.
Ce n'est que pour vous dire ce que je vous dis.
Re[4]: git commit --amend
От: mbait  
Дата: 10.11.18 22:53
Оценка: +1
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, mbait, Вы писали:


DR>>>--amend нужен для исправления ошибки в предыдущем коммите. Для нового изменения всегда надо заводить новый.


M>>Для исправления ошибок есть --fixup, а --amend для добавления забытого.


DR>Amend используется для исправления предыдущего коммита или более старого через interactive rebase. Fixup/autosquash — это просто альтернативный процесс для тех, кто старые коммиты правит часто.


Я хотел сказать, что --fixup получается ближе к тому, что хочет ТС, потому что не затирает HEAD и позволяет "опомниться"

Иногда по ошибке делаю commit и оно создает новую запись в списке коммитов вместо того чтоб обновить текущую. Или делаю наоборот и тогда оно сливает мое изменение с предыдущим, от другого человека.
Есть ли какой-нибудь простой способ сделать чтоб оно создавало новую запись только если сейчас нет текущей, которая еще не была смержена в основную ветку?

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.