Неинтерактивный способ раздавить ряд git-коммитов, не начиная с HEAD - PullRequest
0 голосов
/ 04 марта 2019

Я сейчас работаю над проектом iOS.У меня есть скрипт, который запускается при сборке.Этот скрипт обновляет номер сборки и фиксирует его в git, а также отправляет его.Однако после нескольких дней использования я понял, что побочный эффект.У меня могут быть последовательные коммиты, где он увеличивает номер сборки.Так что мои журналы коммитов залиты этими коммитами.Это особенно усугубляется тем, что проект разбит на несколько основных библиотек.Поэтому работа над библиотеками неизменно приводит к приращению сборки (поскольку это одно и то же рабочее пространство).

Теперь я понимаю, что мне нужен достаточно умный скрипт для сжатия последовательных коммитов, которые являются обновлением номера сборки,Например,

Выполнение

git log -20 --pretty=format:"%h - %s"

даст

6add12a1 - Update the package from handle
70f438be - Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
7d84151f - Updated client version to 0.15.0.2151 and next version to 0.15.0.2152
eace113b - Updated client version to 0.15.0.2150 and next version to 0.15.0.2151
e72624dd - Updated client version to 0.15.0.2149 and next version to 0.15.0.2150
85d15b6c - Updated client version to 0.15.0.2148 and next version to 0.15.0.2149
a4e140cd - Updated client version to 0.15.0.2147 and next version to 0.15.0.2148
ffb18892 - Updated client version to 0.15.0.2146 and next version to 0.15.0.2147
ebd33432 - Updated client version to 0.15.0.2145 and next version to 0.15.0.2146
f0727ca7 - Updated client version to 0.15.0.2144 and next version to 0.15.0.2145
80ab2939 - Adjust balance if FB rewards popup is shown
0c04a1d7 - Updated client version to 0.15.0.2143 and next version to 0.15.0.2144
e89fd769 - Updated client version to 0.15.0.2142 and next version to 0.15.0.2143
c404f9ce - Updated client version to 0.15.0.2141 and next version to 0.15.0.2142
3911fb31 - Updated client version to 0.15.0.2140 and next version to 0.15.0.2141
ee3b7056 - Updated client version to 0.15.0.2139 and next version to 0.15.0.2140
cfb3b2a7 - Updated client version to 0.15.0.2138 and next version to 0.15.0.2139
a11fa3d9 - Add conditionals compilation to remove some logging
b9d0f75a - Disable backlight
ba4447ae - Updated client version to 0.15.0.2137 and next version to 0.15.0.2138

Так что в этом примере я бы хотел раздавить 70f438be доf0727ca7, а затем обновите коммит до что-то вроде «Обновлена ​​версия клиента с 0.15.0.2138 до 0.15.0.2152».

Есть 2 вещи, которые нужно сделать.

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

У меня нет проблем с написанием самих скриптов.Скорее, в центре внимания этого вопроса находится сама команда git.Подробная информация о сценариях представлена ​​в виде контекста.

Что я ищу, так это как использовать git неинтерактивно для сжатия определенного последовательного диапазона коммитов, которые не начинаются с HEAD.Все ссылки, которые я видел до сих пор, вытеснены из HEAD.

Вот так.

Есть ли способ раздавить несколько коммитов неинтерактивно? .

Я расскажу об этом чуть позже сегодня, так как он может удерживать ответ на месте.

О да, и пояснение, все эти коммиты уже выдвинуты.

Примечаниечто это на Mac.И последний скрипт запускается из Xcode (Build Phase) и является скриптом Python, использующим GitPython.

1 Ответ

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

Хорошо, я немного поэкспериментировал и провел его некоторое время. Я нашел решение.

Было бы полезно, если бы те, у кого есть лучшее git-fu, могли подтвердить, что это действительно хороший / безопасный путь.

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

Кажется, эта команда сработаетдля сжатия диапазона коммитов, не начинающихся с HEAD.

git rebase -Xtheirs --onto 80ab2939 7d84151f

Ключ здесь -Xtheirs, так как по крайней мере в моем приложении это приведет к конфликту.Обратите внимание, что мой случай особенный в том, что он основан на известном шаблоне сообщения фиксации, и файлы совпадают.

Я запустил выше в этой истории

6add12a1 - Update the package from handle
70f438be - Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
7d84151f - Updated client version to 0.15.0.2151 and next version to 0.15.0.2152
eace113b - Updated client version to 0.15.0.2150 and next version to 0.15.0.2151
e72624dd - Updated client version to 0.15.0.2149 and next version to 0.15.0.2150
85d15b6c - Updated client version to 0.15.0.2148 and next version to 0.15.0.2149
a4e140cd - Updated client version to 0.15.0.2147 and next version to 0.15.0.2148
ffb18892 - Updated client version to 0.15.0.2146 and next version to 0.15.0.2147
ebd33432 - Updated client version to 0.15.0.2145 and next version to 0.15.0.2146
f0727ca7 - Updated client version to 0.15.0.2144 and next version to 0.15.0.2145
80ab2939 - Adjust balance if FB rewards popup is shown
0c04a1d7 - Updated client version to 0.15.0.2143 and next version to 0.15.0.2144

Это генерирует некоторый вывод:

First, rewinding head to replay your work on top of it...
Auto-merging resources/plists/jks-info.plist
Auto-merging resources/next_build_version.txt
[detached HEAD 8beac4c7] Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
 Date: Mon Mar 4 02:01:15 2019 -0800
 2 files changed, 2 insertions(+), 2 deletions(-)
Committed: 0001 Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
[detached HEAD 4ede3d58] Update the package from handle
 Date: Mon Mar 4 02:03:09 2019 -0800
 1 file changed, 4 insertions(+), 2 deletions(-)
Committed: 0002 Update the package from handle
All done

Но итоговая история (git log) хороша.

4ede3d58 - Update the package from handle
8beac4c7 - Updated client version to 0.15.0.2152 and next version to 0.15.0.2153
80ab2939 - Adjust balance if FB rewards popup is shown
0c04a1d7 - Updated client version to 0.15.0.2143 and next version to 0.15.0.2144
e89fd769 - Updated client version to 0.15.0.2142 and next version to 0.15.0.2143

Мой последний шаг - принудительный толчок, поскольку коммиты уже были переданы.Обратите внимание, что толчок силы переписает вашу историю.Я на самом деле использую git push --force-with-lease, чтобы быть в безопасности.

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