Как я могу просмотреть вывод `git show` в средстве просмотра diff, например meld, kdiff3 и т.д.
Есть много вопросов SO, которые показывают, как просматривать вывод команды git diff
в средстве просмотра diff, например meld, с помощью git difftool
или иначе. Я не спрашиваю о git diff
, хотя.
Я хочу видеть вывод git show <previous commit sha1>
в средстве просмотра diff, например, meld. Как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать git difftool
, чтобы показать одно коммит.
Предположим, вы хотите увидеть фиксацию с помощью sha1 abc123
:
git difftool abc123~1 abc123
(~1
сообщает git перейти к предыдущему фиксации, поэтому abc123~1
является фиксацией до abc123
)
Если вы используете это регулярно, вы можете создать пользовательскую команду git, чтобы упростить ее:
-
Создайте файл git-showtool
где-то на вашем $PATH
со следующим содержимым:
git difftool $1~1 $1
-
Предоставьте разрешения на выполнение этого файла:
chmod +x ~/path/to/git-showtool
-
Используйте команду git showtool <sha1 or tag or ...>
- Profit.
Ответ 2
Основываясь на ответе georgebrock, вы можете создать псевдоним в .gitconfig, что-то вроде этого:
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
Затем вы можете запустить его с помощью git showtool abc123
(без необходимости создания отдельной оболочки script для этого). Если вы оставите ревизию, она будет по умолчанию для HEAD.
Ответ 3
Перевод сагиттарного предложения для git сообразительности, добавьте его в свой глобальный .gitconfig файл, который находится в C:\Users [имя пользователя], если вы пользователь Windows:
[alias]
showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"
или вы можете выполнить следующую команду в оболочке get bash:
git config --global alias.showtool '!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1'
который внесет изменения в файл .gitconfig.
Ответ 4
Основываясь на ответе сагитарри, здесь небольшое изменение для более общего синтаксиса rev:
showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci"
Я использую rev-parse
для прозрачного разрешения сложных выражений rev.
Я удалил $1
в конце, так как вызывается псевдоним, за которым следуют аргументы; он пропускает незаметно при использовании только $1
, но нарушает поведение $*
.
Это позволяет делать приятные вещи, например:
git showtool :/some nasty bug
Ответ 5
Ответ Geogrebrock хорош, но может быть улучшен таким образом:
commit=$1
shift
git difftool $commit~1 $commit [email protected]
Поместите его в исполняемый файл (chmod + x) где-нибудь в $PATH.
Теперь вы можете передать дополнительные аргументы, например указать, какие файлы вы хотите видеть (и игнорировать другие):
$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/
Ответ 6
Файл git-showcommit
(исполняемый) в PATH должен выглядеть следующим образом:
#!/bin/bash
git difftool --dir-diff $1^..$1
тогда вы можете просто вызвать новый инструмент с помощью git showcommit HEAD
или git showcommit a5b26d5