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

如果执行 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 界面(不是命令行),我希望一个链接发送到别人没有代码。

52331 次浏览

The following URL will show all the commits for a single file in a format similar to git log -p:

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

...where:

  • <username> is the username of the person that owns the repo
  • <project> is the repo name
  • <branch> can be 'master' or any other branch
  • <path/to/file> is hopefully self-explanatory

Picking at (somewhat) random, here is an example from the vim-fugitive repo.

An alternative to the direct URL answer (which BTW is perfectly correct) using GitHub's interface is to:

  • Click on 'Source' view
  • Switch to a desired branch
  • Look for the file you want until you get to the actual source view for the file
  • Click 'history' on the top right corner

Based on the answers above and my own attempts to find this exact feature, it appears the correct answer to this question is no.

If you're on Linux, Then install TIG as:

sudo apt-get install tig

and then,

tig path/to/file/

It'll show you all the commits and their respective changes

Talat Parwez