Может ли GitHub показать историю изменений, внесенных в один файл, в форме патча?

89

Если вы это сделаете git log --patch -- path/to/file, вы получите историю файла вместе со всеми изменениями, внесенными в него при каждой фиксации, например:

$ git log --patch -- git-rebase.sh

commit 20351bb06bf4d32ef3d1a6849d01636f6593339f
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Sat Jun 15 18:43:26 2013 +0530

    rebase: use 'git stash store' to simplify logic

    rebase has no reason to know about the implementation of the stash.  In
    the case when applying the autostash results in conflicts, replace the
    relevant code in finish_rebase () to simply call 'git stash store'.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..17be392 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -153,11 +153,8 @@ finish_rebase () {
                then
                        echo "$(gettext 'Applied autostash.')"
                else
-                       ref_stash=refs/stash &&
-                       >>"$GIT_DIR/logs/$ref_stash" &&
-                       git update-ref -m "autostash" $ref_stash $stash_sha1 ||
-                       die "$(eval_gettext 'Cannot store $stash_sha1')"
-
+                       git stash store -m "autostash" -q $stash_sha1 ||
+                       die "$(eval_gettext "Cannot store \$stash_sha1")"
                        gettext 'Applying autostash resulted in conflicts.
 Your changes are safe in the stash.
 You can run "git stash pop" or "git stash drop" it at any time.

commit 2e6e276decde2a9f04fc29bce734a49d3ba8f484
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Fri Jun 14 18:47:52 2013 +0530

    rebase: use peel_committish() where appropriate

    The revisions specified on the command-line as <onto> and <upstream>
    arguments could be of the form :/quuxery; so, use peel_committish() to
    resolve them.  The failing tests in t/rebase and t/rebase-interactive
    now pass.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..6987b9b 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -434,7 +434,7 @@ then
                shift
                ;;
        esac
-       upstream=`git rev-parse --verify "${upstream_name}^0"` ||
+       upstream=$(peel_committish "${upstream_name}") ||
        die "$(eval_gettext "invalid upstream \$upstream_name")"
        upstream_arg="$upstream_name"
 else
@@ -470,7 +470,7 @@ case "$onto_name" in
        fi
        ;;
 *)
-       onto=$(git rev-parse --verify "${onto_name}^0") ||
+       onto=$(peel_committish "$onto_name") ||
        die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
        ;;
 esac

Я хочу иметь возможность получить такой же формат с помощью веб-интерфейса GitHub (а не командной строки) , и я хочу, чтобы ссылку отправили кому-то еще без кода.

ma11hew28
источник
Просмотр сравнения дает вам нечто близкое к тому, что вы ищете, но, к сожалению, не для отдельного файла.
2
Если вы сделаете запрос на добавление функции, возможно, команда разработчиков GitHub добавит ее.

Ответы:

84

Следующий URL-адрес покажет все коммиты для одного файла в формате, аналогичном git log -p :

http://github.com/<username>/<project>/commits/<branch>/<path/to/file>

...где:

  • <username> имя пользователя человека, которому принадлежит репо
  • <project> это название репо
  • <branch> может быть master или любой другой веткой
  • <path/to/file> Надеюсь, говорит само за себя

Выбор (отчасти) случайный, вот пример из репозитория vim-fugitive .

Тим Хениган
источник
+1. Больше тех Commits API: develop.github.com/p/commit.html (в разделе GitHub API develop.github.com )
VonC
17
Это git log path / to / file. Я хочу git log -p путь / к / файлу.
ma11hew28 05
1
Все, что делает, это показывает последнее обновление, а не историю обновлений.
Джерри
4
Я не знаю, почему за это голосуют. Думаю, люди не читают вопрос внимательно. Этот ответ не дает вам списка различий, подобных git log --patch -- path/to/fileтому, о чем просил OP.
jcoffland
1
@jcoffland, за него голосуют, потому что большинство людей вроде меня считают это полезным, и это именно то, что мы ищем, не обращая внимания на вопрос оператора.
mr5
49

Основываясь на приведенных выше ответах и ​​моих собственных попытках найти именно эту функцию, кажется, что правильный ответ на этот вопрос - нет. .

Изменить: прежде чем вы проголосуете против, возможно, попытайтесь доказать, что я ошибаюсь. Иногда правильный ответ - это не то, что вы хотите услышать.

jhk
источник
1
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением - вы всегда можете комментировать свои собственные сообщения, и когда у вас будет достаточная репутация, вы сможете комментировать любое сообщение .
Несомненно,
18
Этот ответ является одновременно конкретным и точным, в отличие от двух других ответов, которые даже не подтверждают, о чем был задан вопрос.
jhk 04
5
Это правильный ответ. Github не имеет возможности отображать результаты исправлений вместе с журналами для одного файла, как это делает git log -p - file
nohat
4
остальные 2 ответа неверны. этот ответ сэкономил мне время и сэкономил разочарование.
Schien
3
«Это не дает ответа на вопрос». Конечно, и тот, который сэкономил мне время. Спасибо, jhk.
ChrisJJ
34

Альтернативой прямому URL-ответу (который, кстати, является совершенно правильным) с использованием интерфейса GitHub, является:

  • Нажмите на "Источник"
  • Перейти на желаемую ветку
  • Ищите нужный файл, пока не дойдете до фактического исходного представления файла.
  • Нажмите "История" в правом верхнем углу.
Xubin
источник
12
Это также фактически не дает того, что ищет оригинальный плакат. Он хочет получить патч, такой же, какой он получил бы git log -p -- file. То, что вы показали, - это просто журнал для определенного файла, например git log -- file, без патчей различий.
-3

Если вы работаете в Linux, установите TIG как:

sudo apt-get install tig

а потом,

tig путь / к / файлу /

Он покажет вам все коммиты и их соответствующие изменения.

Талат Парвез

Талат Парвез
источник