Как мне это сделать? После внесения изменений через git config
я могу сравнить свои поэтапные и зафиксированные изменения с помощью vimdiff, но когда я делаю git show
, я все еще вижу разницу в старом простом стиле. Как мне заставить это работать и для git show
?
Заставить git show показывать различия с помощью vimdiff
Ответы (4)
По умолчанию git show
без параметров, а также git show <object>
отображают изменения для всех файлов в фиксации. Поскольку vimdiff может одновременно сравнивать только один файл, вы не можете использовать его с этими параметрами.
Однако git show <object> -- <file>
показывает изменения в одном файле в фиксации. Вы можете отобразить изменения в vimdiff, запустив вместо этого difftool
:
git difftool SHA~:SHA -- <file>
Если вам нужно больше гибкости, вы всегда можете использовать git show
для получения определенных версий файла и передачи их в vimdiff через Замена процесса
export FILE=path/to/file; vimdiff <(git show SHA1:$FILE) <(git show SHA2:$FILE)
С помощью git show
вы можете показывать такие объекты, как коммиты (см. справочную страницу). Таким образом, вы показываете не разницу двух файлов, а изменения в (возможно, нескольких) файлах. Так что нет двух файлов, которые можно сравнить. Но это именно то, что делает vimdiff, он открывает два файла бок о бок и выделяет различия.
Когда вы используете git difftool
или что-то подобное, он создает файлы для обеих сторон diff и использует инструмент (в вашем случае vimdiff), чтобы сравнить их. git show
не создает эти файлы, поэтому vimdiff не может отобразить его вывод.
Вкратце: git show
— это инструмент для отображения объектов git, а не для создания различий, поэтому его вывод нельзя отобразить как разницу с помощью vimdiff.
Возможно, вы захотите использовать git difftool
. Он будет открывать gvimdiff для каждого измененного файла.
Вы можете использовать обычные параметры git diff
для сравнения разных коммитов.
Попробуйте использовать псевдонимы git. Это для git show
git config --global alias.s difftool\ HEAD^\ HEAD
А это для git show <revision>
git config --global alias.s '!f() { rev=${1-HEAD}; git difftool $rev^ $rev; }; f'
Чтобы увидеть, как это работает, ознакомьтесь с этой страницей.
Следующие работы для меня:
git difftool SHA^..SHA -- <file>