Подтвердить что ты не робот

Git показать, что HEAD ^ не работает. Это нормально?

Я использую Zsh и пытаюсь запустить git show для проекта, чтобы увидеть мою историю изменений. Если я делаю

git show HEAD

он отлично работает, показывая мне свою последнюю фиксацию, однако следующие команды не работают

[master↑5⚡]:~/project $ git show HEAD^ 
zsh: no matches found: HEAD^
[master↑5⚡]:~/project $ git show HEAD^^
zsh: no matches found: HEAD^^

Однако это работает

git HEAD~1

Я делаю что-то неправильно здесь с git show HEAD^^?

git версия 1.7.4.5

4b9b3361

Ответ 1

Карат (^) имеет особое значение в Bash и Zsh.

Вам нужно будет избежать этого или процитировать его:

% git show HEAD\^

% git show 'HEAD^^'

Ответ 2

Вместо того, чтобы скрывать или цитировать каретку, вы можете просто сказать zsh, чтобы остановить выполнение команды, когда она не соответствует шаблону шара. Поместите этот параметр в свой .zshrc:

setopt NO_NOMATCH 

Эта опция останавливает zsh от прерывания команд, если glob-matching терпит неудачу. git show HEAD^ будет работать правильно, и вам не нужно избегать каретки. Кроме того, globing и ^ обозначение событий будут по-прежнему работать так, как вы ожидаете.

Чтобы ответить на вопрос dolzenko в комментариях, вы можете получить git log ^production master (что, по совпадению, также точно, что синтаксис git "double dot" делает: git log production..master) для работы путем отключения расширенного globbing:

setopt NO_EXTENDED_GLOB

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

Ответ 3

Вы также можете использовать noglob.

% noglob git show HEAD^ 

(или сделать псевдоним для noglob git)