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

Как я могу просмотреть вывод `git show` в средстве просмотра diff, например meld, kdiff3 и т.д.

Есть много вопросов SO, которые показывают, как просматривать вывод команды git diff в средстве просмотра diff, например meld, с помощью git difftool или иначе. Я не спрашиваю о git diff, хотя.

Я хочу видеть вывод git show <previous commit sha1> в средстве просмотра diff, например, meld. Как я могу это сделать?

4b9b3361

Ответ 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