Что означает ~ после ветки git rebase --onto? - PullRequest
1 голос
/ 22 мая 2019

В примере, который приводятся в документации Git для git rebase --onto, неясно, что означает ~

Диапазон коммитов также может быть удален с помощью rebase. Если у нас следующая ситуация:

enter code here E---F---G---H---I---J topicA

тогда команда

git rebase --onto topicA~5 topicA~3 topicA

приведет к удалению коммитов F и G:

E---H'---I'---J' topicA

Это полезно, если F и G были в некотором роде несовершенны или не должны быть частью темы A. Обратите внимание, что аргумент --onto и параметр могут быть любым допустимым коммитом.

Означает ли topicA~5 5 коммитов из главы topicA? (Так что считать в обратном порядке?)

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

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Это от git rev-parse

<rev>~<n>, e.g. master~3

Суффикс ~<n> к параметру ревизии означает объект фиксации, который является предком <n> поколения указанного объекта фиксации, следуя только первым родителям.
То есть <rev>~3 эквивалентно <rev>^^^, что эквивалентно <rev>^1^1^1.

Так что в вашем случае, да, topicA~5 означает 5 коммитов из главы topicA: commit E.

0 голосов
/ 22 мая 2019

~ Означает родителя коммита, поэтому hash~5 является пра-пра-пра-пра-пра-прародителем hash.

Графически это можно увидеть так (вывод похожна git log --graph --oneline, самый старый коммит внизу):

* ggggg - (HEAD)
* fffff
* eeeee
* ddddd
* ccccc
* bbbbb
* aaaaa

Затем:

ggggg~5 == bbbbb

Я дал более подробное объяснение ~ и ^ в этом ответе: Git, что логическое различие между родителем и предком

...