Сжатие многих коммитов в меньшее, но большее коммиты - PullRequest
14 голосов
/ 02 июня 2011

Я делаю все, что делаю каждый час.Это хорошо, но я получаю слишком много коммитов.

Я бы хотел очистить его, чтобы вместо:

1 hour ago
2 hours ago
.
23 hours ago
24 hours ago

у меня было что-то вроде:

1 hour ago
2 hours ago
1 day ago
7 days ago

и т. Д.

В настоящее время я выполняю каждый час:

git-add .
git-commit -a

Как удалить определенные коммиты?Я не хочу отменять какие-либо изменения.Я просто не хочу иметь так много пунктов, чтобы вернуться к.Я хотел бы получить много коммитов за последние несколько часов, а затем только несколько после этого (прошедший день, неделю, месяц и т. Д. Или другие важные моменты, которые я намеренно сохраняю).

Ответы [ 2 ]

29 голосов
/ 02 июня 2011

Посмотрите на команду git rebase -i.Это позволяет вам «сдавить» коммиты в более крупные, что похоже на то, что вы хотите сделать.

0 голосов
/ 01 марта 2019

Использование 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 ваш текущий рабочий каталог, управлять вашей историей, они восстановят то, что вы спрятали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...