Использование git rebase -i
с squash
- это простой способ сделать это.Однако для этого требуется взаимодействие с пользователем.
Если вы делаете это все время, вы можете подумать о том, чтобы написать для себя или git commit hook (см. Настройка Git - Git Hooks ), или просто обычный скрипт, который вы можете запускать, когда хотите.Если бы у меня было больше времени, я бы написал это для вас.Кажется, стоит потратить потраченное время на то, чтобы автоматизировать это больше для себя.
Чтобы сделать это без взаимодействия с пользователем, вам нужно избегать git rebase -i
.В этом случае что-то вроде git reset --soft
может быть тем, что вы ищете (см. Git Reset для дополнительной информации).Если вы запускаете это как ловушку перед фиксацией, вы можете проверить, был ли последний коммит вчера (см. Ниже информацию о перечислении коммитов по дате).Если последний коммит был вчера, это сообщило бы вам, что пора сворачивать коммиты в один коммит.Как только вы git reset --soft
выполнили первый коммит, выполненный вчера, вы можете повторно зафиксировать все эти изменения.Помните, что вам нужно указать исходную дату создания, используя параметр --date
, равный git commmit
, чтобы свернутый коммит сохранил свою старую дату.
С https://git -scm.com/ docs / pretty-format вы можете создать список ваших последних коммитов для разбора на основе даты, когда коммит был изначально создан.Например, ниже показано, как создать список последних 4 коммитов.В качестве примера я выбрал 4, вы можете выбрать число, которое гарантирует, что вы видите все коммиты за предыдущие дни, в зависимости от вашего репо, вы можете перечислить все коммиты и реорганизовать всю свою историю.
git log --format="%H %ar" | head -n 4
Вывод выглядит следующим образом:
6c3c5d3970c9f7de9e762f7e8300eaa37db11363 19 hours ago
2e1a8020f59be0cf43500a86033e2acde0707961 2 days ago
9bc3479a257e3f7f9dc9cbb88f3723706369b160 2 days ago
b26353b764cdd3bce0e7f0dec90ea84127c4b292 2 days ago
Я не уверен, что будет проще разобрать список, если он указан с относительными датами или в другом формате даты.
Кроме того, я понял, что если вы напишите это как ловушку перед фиксацией, вам потребуется временно git stash
ваш текущий рабочий каталог, управлять вашей историей, они восстановят то, что вы спрятали.