I am reviewing a very old commit. I want to see the changes a particular commit made but I want to see that in full context, i.e. I want to see whole file and the changes that person had made. The following command,
git show -w <commit-id>
is not showing me full context. Any suggestion?
git-show
comes with the following flag
-U<n>, --unified=<n>
Generate diffs with <n> lines of context instead of the usual
three. Implies -p.
See the git-show
man page for more details.
By specifying a large enough <n>
, e.g.
git show -U1000 <object>
you will get full context.
Example
Clone some repository for the sake of this example (e.g. the Git project's repo):
$ git clone https://github.com/git/git
$ cd git
Try running the command in question on some committed file (e.g. Documentation/RelNotes/2.3.0.txt
):
$ git show -U100 -- Documentation/RelNotes/2.3.0.txt
commit 1e6f5b22ad318446500fbd3b94b733eddd5b6414
Author: Junio C Hamano <gitster@pobox.com>
Date: Wed Jan 7 13:12:54 2015 -0800
Fourth batch for 2.3 cycle
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff --git a/Documentation/RelNotes/2.3.0.txt b/Documentation/RelNotes/2.3.0.txt
index 1b1dcbb..7f25bbf 100644
--- a/Documentation/RelNotes/2.3.0.txt
+++ b/Documentation/RelNotes/2.3.0.txt
@@ -1,165 +1,247 @@
Git v2.3 Release Notes
======================
Updates since v2.2
------------------
Ports
* Recent gcc toolchain on Cygwin started throwing compilation warning,
which has been squelched.
UI, Workflows & Features
* It was cumbersome to use "GIT_SSH" mechanism when the user wanted
to pass an extra set of arguments to the underlying ssh. A new
environment variable GIT_SSH_COMMAND can be used for this.
* A request to store an empty note via "git notes" meant to remove
note from the object but with --allow-empty we will store a
(surprise!) note that is empty.
* "git interpret-trailers" learned to properly handle the
"Conflicts:" block at the end.
* "git am" learned "--message-id" option to copy the message ID of
the incoming e-mail to the log message of resulting commit.
+ * "git clone --reference=<over there>" learned the "--dissociate"
+ option to go with it; it borrows objects from the reference object
+ store while cloning only to reduce network traffic and then
+ dissociates the resulting clone from the reference by performing
+ local copies of borrowed objects.
+
* "git send-email" learned "--transfer-encoding" option to force a
non-fault Content-Transfer-Encoding header (e.g. base64).
...
Sanity check
Compare the output of that command to the contents of Documentation/RelNotes/2.3.0.txt
.
$ cat Documentation/RelNotes/2.3.0.txt
Git v2.3 Release Notes
======================
Updates since v2.2
------------------
Ports
* Recent gcc toolchain on Cygwin started throwing compilation warning,
which has been squelched.
UI, Workflows & Features
* It was cumbersome to use "GIT_SSH" mechanism when the user wanted
to pass an extra set of arguments to the underlying ssh. A new
environment variable GIT_SSH_COMMAND can be used for this.
* A request to store an empty note via "git notes" meant to remove
note from the object but with --allow-empty we will store a
(surprise!) note that is empty.
* "git interpret-trailers" learned to properly handle the
"Conflicts:" block at the end.
* "git am" learned "--message-id" option to copy the message ID of
the incoming e-mail to the log message of resulting commit.
* "git clone --reference=<over there>" learned the "--dissociate"
option to go with it; it borrows objects from the reference object
store while cloning only to reduce network traffic and then
dissociates the resulting clone from the reference by performing
local copies of borrowed objects.
* "git send-email" learned "--transfer-encoding" option to force a
non-fault Content-Transfer-Encoding header (e.g. base64).
* "git send-email" normally identifies itself via X-Mailer: header in
the message it sends out. A new command line flag --no-xmailer
allows the user to squelch the header.
* "git push" into a repository with a working tree normally refuses
to modify the branch that is checked out. The command learned to
optionally do an equivalent of "git reset --hard" only when there
is no change to the working tree and the index instead, which would
be useful to "deploy" by pushing into a repository.
* "git new-workdir" (in contrib/) can be used to populate an empty
and existing directory now.
From this post, the following will give you the file as it looked at the specific commit:
git show REVISION:path/to/file
EDIT: Based on the comments below, it's been highlighted the above might not be quite with the OP was asking.
In order to get the file at the particular version along with the changes and the author of each line, you should instead use:
git blame REVISION path/to/file