Я хотел бы запустить git filter-branch
на всех дочерних элементах данного коммита. Это кажется непростой задачей, поскольку, похоже, нет способа сказать git rev-list
, что нужно возвращать только детей определенного коммита. Использование синтаксиса .. не будет работать, поскольку оно также будет включать родительские коммиты любого слияния в этом диапазоне. Я что-то здесь упускаю?
редактировать
Чтобы уточнить: у меня есть ветвь с именем base
, которая была объединена в derivative
несколько раз. Я хотел бы перечислить и в конечном итоге запустить filter-branch
, только те коммиты, которые происходят от его самого последнего коммита. Я также хотел бы перечислить похожие коммиты в других ветках.
(упрощенная) ситуация (derivative
- ветвь слева):
$ git rev-list --graph --oneline base derivative
* f16fd151b374b2aeec8b9247489c518a6347d001 merged in the latest from the base branch
|\
| * 564d795afb63eab4ffe758dbcd726ca8b790f9f6 spelling correction
* | 2f2ed5f1d429492e1491740e30be5a58ec20af21 snogg before flarg
|\ \
| |/
| * 0c520ea33ef57b30846b122781d41fcef5e62f9b now with added flarg
* | 5068c34c3862856f511b6b4d48f2adb766e1bde4 now with added snogg
|/
* b51f227e931f830cbda042bc372087398ae7e50d initial commit
@ Предложение Аракнида, похоже, не работает, если я не потрудился прочитать его:
$ git rev-list --oneline derivative --not base
f16fd151b374b2aeec8b9247489c518a6347d001 merged in the latest from the base branch
2f2ed5f1d429492e1491740e30be5a58ec20af21 snogg before flarg
5068c34c3862856f511b6b4d48f2adb766e1bde4 now with added snogg
, поскольку это дает все коммиты в derivative
, за исключением коммитов в base
. Этот вид имеет смысл, поскольку все, что он делает - это удаляет предков отрицательного коммита. То, что я хочу показать, это только первая строка.