LINUX.ORG.RU

Git добавить исправление к существующему коммиту

 ,


0

1

Оформил недавно PR https://github.com/void-linux/void-packages/pull/42755
В процессе проверок были выявлены проблемы. Решил их и опять сделал коммиты. После чего контрибьютер abenson написал: «Please squash these into a single commit.»
Безуспешно попытавшись обьединить коммиты в 1, я решил закрыть PR и сделать новый, т.к. с git я только со вчера.

$ git clone git@github.com:onlylunix/void-packages.git
$ git remote add upstream https://github.com/void-linux/void-packages.git
$ git pull
$ git checkout master -b firebird3upd3.0.10-1
Редактирую файлы и делаю commit:
$ git add srcpkgs/firebird3/files/firebird-fix-perm-fdb
$ git add srcpkgs/firebird3/files/firebird.xinetd
# git add ...
$ commit -m "firebird3: update to 3.0.10"
$ git push --set-upstream origin firebird3upd3.0.10-1
В браузере на github-е делаю новый PR https://github.com/void-linux/void-packages/pull/42789
Вижу замечания от контрибьютера abenson и исправляю файл firebird-fix-perm-fdb.
Как мне теперь это новое исправление скоммитить чтобы был всего 1 коммит?
Если опять делать коммит:
$ git add srcpkgs/firebird3/files/firebird-fix-perm-fdb
$ git commit -m "Ololo"
$ git push --set-upstream origin firebird3upd3.0.10-1
, то их будет 2.
И там опять просят: «Please don't open and close PRs as that makes it more difficult for us to track issues and needed changes.

In the future, please make the changes by amending and squashing the existing commits and then force pushing to the same branch.»

★★★★★

Последнее исправление: superuser (всего исправлений: 2)

  1. Переходишь в каталог со своим репозиторием.
  2. Запускаешь git gui
  3. Ставишь галочку на «Amend» («Исправить последний коммит»)
  4. Добавляешь нужные изменения, коммитишь.
annulen ★★★★★
()
Ответ на: комментарий от annulen

запустил git commit --amend , появилось это:

firebird3: update to 3.0.10

# Пожалуйста, введите сообщение коммита для ваших изменений. Строки,
# начинающиеся с «#» будут проигнорированы, а пустое сообщение
# отменяет процесс коммита.
#
# Дата:      Wed Mar 15 20:00:21 2023 +0300
#
# Текущая ветка: firebird3upd3.0.10-1
# Эта ветка соответствует «origin/firebird3upd3.0.10-1».
#
# Изменения, которые будут включены в коммит:
#       новый файл:    srcpkgs/firebird3/INSTALL
#       новый файл:    srcpkgs/firebird3/files/firebird-fix-perm-fdb
#       новый файл:    srcpkgs/firebird3/files/firebird.xinetd
#       новый файл:    srcpkgs/firebird3/files/firebird3/run
#       новый файл:    srcpkgs/firebird3/patches/fix-databases-conf.patch
#       удалено:       srcpkgs/firebird3/patches/fix-std-isnan.patch
#       изменено:      srcpkgs/firebird3/template
#
# Изменения, которые не в индексе для коммита:
#       изменено:      srcpkgs/firebird3/files/firebird-fix-perm-fdb
#
~
~
/tmp/void-packages/.git/COMMIT_EDITMSG: unmodified: line 1
и что теперь делать?

superuser ★★★★★
() автор топика
Последнее исправление: superuser (всего исправлений: 1)
Ответ на: комментарий от superuser

Так же, как сораняются обычные файлы в вашем EDITOR’е :)

Или переходить на git gui, если что-то непонятно - поможет разобраться с амендами, устройством индекса, и вообще с гитом.

annulen ★★★★★
()
Ответ на: комментарий от annulen
0 $ git commit --amend
[firebird3upd3.0.10-1 c099749699] firebird3: update to 3.0.10
 Date: Wed Mar 15 20:00:21 2023 +0300
 7 files changed, 90 insertions(+), 26 deletions(-)
 create mode 100644 srcpkgs/firebird3/INSTALL
 create mode 100755 srcpkgs/firebird3/files/firebird-fix-perm-fdb
 create mode 100644 srcpkgs/firebird3/files/firebird.xinetd
 create mode 100755 srcpkgs/firebird3/files/firebird3/run
 create mode 100644 srcpkgs/firebird3/patches/fix-databases-conf.patch
 delete mode 100644 srcpkgs/firebird3/patches/fix-std-isnan.patch
0 $ git push
To github.com:onlylunix/void-packages.git
 ! [rejected]              firebird3upd3.0.10-1 -> firebird3upd3.0.10-1 (non-fast-forward)
error: не удалось отправить некоторые ссылки в «github.com:onlylunix/void-packages.git»
подсказка: Обновления были отклонены, так как верхушка текущей ветки
подсказка: позади ее внешней части. Заберите и слейте внешние изменения 
подсказка: (например, с помощью «git pull ...») перед повторной попыткой отправки
подсказка: изменений.
подсказка: Для дополнительной информации, смотрите «Заметку о быстрой перемотке»
подсказка: в «git push --help».
1 $ 

нифига не работает

superuser ★★★★★
() автор топика

После чего контрибьютер abenson написал: «Please squash these into a single commit.»

Не совсем понятно почему нужно самому squash делать. Я обычно делаю squash and merge в самом PR. Но это должно быть включено в настройках репозитория.

Руками делать squash странно.

chkalov
()
Последнее исправление: chkalov (всего исправлений: 1)
Ответ на: комментарий от annulen
1 $ git push -f
Перечисление объектов: 19, готово.
Подсчет объектов: 100% (19/19), готово.
При сжатии изменений используется до 4 потоков
Сжатие объектов: 100% (12/12), готово.
Запись объектов: 100% (13/13), 2.53 КиБ | 2.53 МиБ/с, готово.
Всего 13 (изменений 4), повторно использовано 7 (изменений 0), повторно использовано пакетов 0
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To github.com:onlylunix/void-packages.git
 + d1c2f2a0f4...c099749699 firebird3upd3.0.10-1 -> firebird3upd3.0.10-1 (forced update)
0 $ 

а изменений на github нет!!!

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

так это предыдущее, а последнего то нет
я в firebird-fix-perm-fdb поменял для sed символ-разделитель с / на |
потом выполнил:

0 $ git commit --amend
[firebird3upd3.0.10-1 c099749699] firebird3: update to 3.0.10
 Date: Wed Mar 15 20:00:21 2023 +0300
 7 files changed, 90 insertions(+), 26 deletions(-)
 create mode 100644 srcpkgs/firebird3/INSTALL
 create mode 100755 srcpkgs/firebird3/files/firebird-fix-perm-fdb
 create mode 100644 srcpkgs/firebird3/files/firebird.xinetd
 create mode 100755 srcpkgs/firebird3/files/firebird3/run
 create mode 100644 srcpkgs/firebird3/patches/fix-databases-conf.patch
 delete mode 100644 srcpkgs/firebird3/patches/fix-std-isnan.patch
0 $ git push
To github.com:onlylunix/void-packages.git
 ! [rejected]              firebird3upd3.0.10-1 -> firebird3upd3.0.10-1 (non-fast-forward)
error: не удалось отправить некоторые ссылки в «github.com:onlylunix/void-packages.git»
подсказка: Обновления были отклонены, так как верхушка текущей ветки
подсказка: позади ее внешней части. Заберите и слейте внешние изменения 
подсказка: (например, с помощью «git pull ...») перед повторной попыткой отправки
подсказка: изменений.
подсказка: Для дополнительной информации, смотрите «Заметку о быстрой перемотке»
подсказка: в «git push --help».
1 $ git push -f
Перечисление объектов: 19, готово.
Подсчет объектов: 100% (19/19), готово.
При сжатии изменений используется до 4 потоков
Сжатие объектов: 100% (12/12), готово.
Запись объектов: 100% (13/13), 2.53 КиБ | 2.53 МиБ/с, готово.
Всего 13 (изменений 4), повторно использовано 7 (изменений 0), повторно использовано пакетов 0
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To github.com:onlylunix/void-packages.git
 + d1c2f2a0f4...c099749699 firebird3upd3.0.10-1 -> firebird3upd3.0.10-1 (forced update)
0 $ 
а на github -е старое

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

Угу

# Изменения, которые не в индексе для коммита:
#       изменено:      srcpkgs/firebird3/files/firebird-fix-perm-fdb

Берешь git gui и перестаешь сношать мозги себе и людям. Понимаешь суть работы с индексом, тогда уже можно делать простые вещи командами в консоли.

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

да, наконец-то

0 $ git status
Текущая ветка: firebird3upd3.0.10-1
Эта ветка соответствует «origin/firebird3upd3.0.10-1».

Изменения, которые не в индексе для коммита:
  (используйте «git add <файл>...», чтобы добавить файл в индекс)
  (используйте «git restore <файл>...», чтобы отменить изменения в рабочем каталоге)
	изменено:      srcpkgs/firebird3/files/firebird-fix-perm-fdb

индекс пуст (используйте «git add» и/или «git commit -a»)
0 $ git add srcpkgs/firebird3/files/firebird-fix-perm-fdb
0 $ git commit --amend --no-edit
[firebird3upd3.0.10-1 009fd64feb] firebird3: update to 3.0.10
 Date: Wed Mar 15 20:00:21 2023 +0300
 7 files changed, 89 insertions(+), 26 deletions(-)
 create mode 100644 srcpkgs/firebird3/INSTALL
 create mode 100755 srcpkgs/firebird3/files/firebird-fix-perm-fdb
 create mode 100644 srcpkgs/firebird3/files/firebird.xinetd
 create mode 100755 srcpkgs/firebird3/files/firebird3/run
 create mode 100644 srcpkgs/firebird3/patches/fix-databases-conf.patch
 delete mode 100644 srcpkgs/firebird3/patches/fix-std-isnan.patch
0 $ git push -f
Перечисление объектов: 19, готово.
Подсчет объектов: 100% (19/19), готово.
При сжатии изменений используется до 4 потоков
Сжатие объектов: 100% (12/12), готово.
Запись объектов: 100% (13/13), 2.51 КиБ | 2.51 МиБ/с, готово.
Всего 13 (изменений 4), повторно использовано 5 (изменений 0), повторно использовано пакетов 0
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To github.com:onlylunix/void-packages.git
 + c099749699...009fd64feb firebird3upd3.0.10-1 -> firebird3upd3.0.10-1 (forced update)
0 $ 

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

Теперь нужно открыть для себя git status, git diff, git diff --cached, git add -p - и можно будет с комфортом делать из командной строки то, что делается за пару кликов в git gui :)

annulen ★★★★★
()

я решил закрыть PR и сделать новый

Я иногда такие штуки наблюдаю, но никак не могу к ним привыкнуть :D Один раз видел, как человек аж 4 PR создал последовательно и все предыдущие закрывал. В каждом была на тот момент ветка обсуждений.

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

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

Лучше уточнить у него и попросить совета.

нельзя ничего спрашивать. На любой вопрос лоровские посетители отвечают, «а, это фигня, мог бы и сам найти».

Не верь, не бойся, не прости - вот практика форума.

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

нельзя ничего спрашивать. На любой вопрос лоровские посетители отвечают, «а, это фигня, мог бы и сам найти».

Здесь очевидно, что человек использует сложный нетривиальный инструмент (git) методом тыка, не удосужившись прочитать хотя бы 1 из 100,000,000 туториалов на всех языках мира, чтобы понять хотя бы самые основы.

С одной стороны, да, форумы для того, чтобы спрашивать и отвечать, с другой стороны, это выглядит совсем некрасиво, надо хотя бы немного попытаться разобраться, прежде чем задавать вопросы о самой базовой функциональности.

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

И как новичку отличить хороший урок от мусора? Ведь новичок вбивает в поисковик общие фразы и получает кучу шлака. Форумы для этого и нужны – получить пинок в правильном направлении или ссылку на хорошее объяснение.

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

Есть официальные руководства, в т.ч. переведённые на русский:
https://git-scm.com/book/ru/v2

Любой человек с IQ выше комнатной температуры, а автор явно из таких, вырабатывает со временем эвристики, как отличить мусор от более-менее достоверной информации.

emorozov
()

Покажу, как сделать сквош коммитов через интерактивный rebase.

Смотри, rebase - это такая интерактивная перезапись истории. Ты выбираешь «базу», относительно которой будешь заново применять свои коммиты - в твоём случае это ветка «develop».

Для начала, закоммить все свои данные, команда git status должна тебе сообщить, что тебе нечего коммитить.

Затем обнови ветку develop, чтобы оперировать с последней её версией: git fetch develop

Данная команда обновит remote ветку develop - то есть твой origin/develop. Твоя локальная ветка develop останется без измнений.

Теперь можно приступать к интерактивному rebase: git rebase -i origin/develop

Тут откроется твой текстовый редактор, который покажет все коммиты, которые ты сделал.

Пример:

pick c6a8c39d Первый коммит
pick 5de0297e Второй коммит
pick 929992e0 Третий коммит
...
pick 5645224a Самый новый коммит

# Rebase d950e1d9..5645224a onto d950e1d9 (4 commands)

Теперь ты можешь изменять каждый коммит. Первое слово в строке - сейчас оно «pick», это команда. Внизу в комментах написано, какие команды есть и что они значат. Pick, к примеру, означает взять этот коммит и применить его.

Нас интересует команда squash, которая сливает коммит с предыдущим. Поэтому мы ставим squash на всех коммитах кроме первого:

pick c6a8c39d Первый коммит
squash 5de0297e Второй коммит
squash 929992e0 Третий коммит
...
squash 5645224a Самый новый коммит

# Rebase d950e1d9..5645224a onto d950e1d9 (4 commands)

Потом, если не будет конфликтов (А если они будут, то разрешаешь их, удаляешь *.orig файлы, добавляешь всё в индекс через git add ., и делаешь git rebase --continue), откроется окошко с сообщением единственного коммита, который заместит все твои.

Там по-умолчанию будет комбинация из сообщений всех коммитов, поэтому удали все сообщения что там будут, и задай нормальное:

# This is a combination of 4 commits.
My squashed commit
# Please enter the commit message for your changes. Lines starting

Поздравляю, вы успешно ребейзнулись!

Теперь, после проверки, можно опубликовать свои изменения. Если уже пушил раньше, то сейчас нужно форспушнуть, так как мы делали перезапись истории: git push --force

Fizzika ★★
()
Последнее исправление: Fizzika (всего исправлений: 2)
24 января 2024 г.