DEV Community

Franz Wong
Franz Wong

Posted on

View last change of a file in git without knowing the hash

git diff can show you the differences between 2 commits. You can use git diff HEAD~1 HEAD -- <filename> if the previous change is in the last commit.

But most of the time, the last change is not made in the last commit. It was made in n-th commits before. You can use git log -- <filename> to find out the commit of the last change. This introduces an extra step. 😅

Actually, you can use git log -p instead. Suppose we have a setup like below. We want to check the changes of b.

git init

echo "a1" > a
echo "b1" > b
git add .
git commit -m "1st commit"

echo "b2" > b
git add b
git commit -m "2nd commit"

echo "a3" > a
git add a
git commit -m "3rd commit"

It doesn't show anything if we use git diff HEAD~1 HEAD -- b, because it is comparing the 2nd and 3rd commit, there is no change in b.

If we use git log -p -- b, we can see all the changes on b without knowing the commit hash.

commit 5bb2c7acf3ba237f7c3f2b367996e92dd10b271f
Author: Franz <xxx>
Date:   Sat Sep 19 12:08:34 2020 +0800

    2nd commit

diff --git a/b b/b
index c9c6af7..e6bfff5 100644
--- a/b
+++ b/b
@@ -1 +1 @@

commit bd6508390bcb0f305a9e3e1f9a393d874df419c9
Author: Franz <xxx>
Date:   Sat Sep 19 12:07:54 2020 +0800

    1st commit

diff --git a/b b/b
new file mode 100644
index 0000000..c9c6af7
--- /dev/null
+++ b/b
@@ -0,0 +1 @@

If you want to see only the last change, you can use git log -p -1 -- b.

One more thing, you can use --no-pager if you don't like to switch to interactive mode when checking the diff. Just do git --no-pager log -p -- b.

Discussion (0)