С https://git -scm.com / docs / git-rev-parse # _specifying_ranges :
Фиксация исключений
^ (каретка) Обозначение
Чтобы исключить коммиты, достижимые из коммита, используется префикс ^. Например. ^ r1 r2 означает коммиты, достижимые из r2, но исключая
достижимы из r1 (то есть r1 и его предков).
У меня есть тестовый репозиторий, в котором я опробовал этот синтаксис. Для целей этого вопроса он состоит из трех обычных коммитов:
git log --pretty=oneline topic1
77ffe1ada25be4b465be9fc9b46f63981ecc8b16 (origin/topic1, topic1) second commit of topic 1
b5803f6c59cbc9ae6b4bba81b0d5ad8cfbd8f23a start of topic 1
75400b34ebc0936dd28513c686c8adb526f063e6 (origin/master) Initial Commit
Давайте попробуем исключить все, кроме самого последнего коммита:
git log --pretty=oneline ^topic1~ topic1
77ffe1ada25be4b465be9fc9b46f63981ecc8b16 (origin/topic1, topic1) second commit of topic 1
b5803f6c59cbc9ae6b4bba81b0d5ad8cfbd8f23a start of topic 1
75400b34ebc0936dd28513c686c8adb526f063e6 (origin/master) Initial Commit
Это не сработало. Это кажется странным, учитывая, что мы отлично следуем обозначениям карета. Предположим, мы вместо этого пытаемся использовать хеш коммита:
git log --pretty=oneline ^b5803 topic1
77ffe1ada25be4b465be9fc9b46f63981ecc8b16 (origin/topic1, topic1) second commit of topic 1
b5803f6c59cbc9ae6b4bba81b0d5ad8cfbd8f23a start of topic 1
75400b34ebc0936dd28513c686c8adb526f063e6 (origin/master) Initial Commit
Все еще не работает. Напротив, другие обозначения работают как ожидалось:
git log --pretty=oneline topic1 --not topic1~
77ffe1ada25be4b465be9fc9b46f63981ecc8b16 (origin/topic1, topic1) second commit of topic 1
git log --pretty=oneline topic1~..topic1
77ffe1ada25be4b465be9fc9b46f63981ecc8b16 (origin/topic1, topic1) second commit of topic 1
Почему запись исключения каретки не ведет себя так же?