GitHub能否以补丁程序形式显示对一个文件所做的更改的历史记录?


88

如果这样做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的Web界面(而不是命令行)获得相同的格式,并且希望有一个链接无需代码即可发送给其他人。


比较视图为您提供了与所需内容接近的东西,但是不幸的是,它不是针对单个文件的。

2
如果您对此功能提出要求,也许GitHub开发团队会添加它。

Answers:


83

以下URL将以类似于以下格式显示单个文件的所有提交git log -p

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

...哪里:

  • <username> 是拥有仓库的人的用户名
  • <project> 回购名称是
  • <branch> 可以是“主人”或任何其他分支
  • <path/to/file> 希望是不言自明的

以(有点)随机采摘,这是来自vim-fugitive repo的示例。


+1。更这些提交API的:develop.github.com/p/commits.html(在GitHub的API部develop.github.com
VonC

17
那是git log path / to / file。我想要git log -p path / to / file。
ma11hew28 2010年

1
所做的只是显示最新更新,而不是更新历史记录。
格里2014年

4
我不知道为什么要这样投票。我想人们没有仔细阅读问题。该答案没有给您列出差异列表,例如git log --patch -- path/to/fileOP要求的列表。
jcoffland '16

1
@jcoffland受到了谴责,因为像我这样的大多数人都觉得这很有帮助,而这正是我们在寻找的内容,尽管忽略了操作员的问题。
mr5

49

基于上述问题的答案,我自己试图找到这个确切的功能,它出现在正确回答这个问题是没有

编辑:在您投反对票之前,也许尝试证明我错了。有时正确的答案不是您想听到的。


1
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您有足够的声誉,就可以在任何帖子中发表评论
indubitablee 2015年

18
这个答案既具体又准确,与其他两个答案不同,后者甚至都没有意识到问题的所在。
jhk 2015年

5
这是正确的答案。Github无法像git log -p-file一样显示单个文件的补丁结果和日志的方式
nohat 2015年

4
其他2个答案不正确。这个答案节省了我的时间和沮丧。
Schien 2016年

3
“这不能为问题提供答案。” 当然可以,这为我节省了时间。谢谢jhk。
ChrisJJ

34

使用GitHub的界面来替代直接URL答案(BTW完全正确)的替代方法是:

  • 单击“源”视图
  • 切换到所需的分支
  • 查找所需的文件,直到进入该文件的实际源视图为止
  • 点击右上角的“历史记录”

12
实际上不给什么原始的海报所期待的。他想要的补丁输出与他得到的一样git log -p -- file。您显示的只是特定文件的日志,例如git log -- file,没有diff补丁。

-3

如果您使用的是Linux,则将TIG安装为:

须藤apt-get install tig

然后,

tig路径/到/文件/

它将向您显示所有提交及其各自的更改

塔拉特·帕威兹(Talat Parwez)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.