Skip to contentSkip to conversation

How do I get the correct modification status after running git diff?

DISCUSSION jateeq 3 participants 4 messages Jun 15, 2016

lore
Share & tools
lore

jateeq

author
#0 lore raw

Hello,

I have added a new file to a working repository, and would like to run a diff between the last commit and whatever is int he working tree, along with an identification of what kind of a modification it was. Currently, I am adding all files to the index with the -N option, and then running a git diff --name-status. This works well for existing files that have been modified or deleted, but fails if a file is rename or is added. Does anyone know of the right way to do this? The commands I am using to add and diff newly added files are as follows in the sequence shown.

Commands:
echo "this is a new file" > file1.xml
git add -N .
git diff --name-status

The output is :
M file1.xml

I want the status to show A for the newly added file (and R for renamed files but I don't know if that's possible).

Thank You,
Jawad.

Signature · 2 lines
View this message in context: http://old.nabble.com/How-do-I-get-the-correct-modification-status-after-running-git-diff--tp27782430p27782430.html
Sent from the git mailing list archive at Nabble.com.
author
#1 lore raw

Ok, so I think I know what I was doing wrong... i wasn't comparing the working tree with the last commit (HEAD), although I still don't know what exactly I was comparing the working tree with. On reading the manual a little more carefully, I realised the command should have been:

git diff -M --name-status HEAD

This solves the problem of newly added files, but doesn't show 'R' for renamed files even after I ask git to detect renamed files - just shows that the renamed file was deleted (doesn't detect that the new renamed file was added). So I would still appreciate some input here.

Renaming flie:
mv randomfile.xml random.xml

Diffing:
git diff -M --name-status HEAD

Output:
D randomfile.xml

Thanks,
jawad

Signature · 2 lines
View this message in context: http://old.nabble.com/How-do-I-get-the-correct-modification-status-after-running-git-diff--tp27782430p27782895.html
Sent from the git mailing list archive at Nabble.com.
#2 lore raw

jateeq venit, vidit, dixit 04.03.2010 17:11:

Quoted 4 lines

Ok, so I think I know what I was doing wrong... i wasn't comparing the working tree with the last commit (HEAD), although I still don't know what exactly I was comparing the working tree with. On reading the manual a

You were comparing the working tree with the index (staging area).

Quoted 9 lines

little more carefully, I realised the command should have been:

git diff -M --name-status HEAD

This solves the problem of newly added files, but doesn't show 'R' for renamed files even after I ask git to detect renamed files - just shows that the renamed file was deleted (doesn't detect that the new renamed file was added). So I would still appreciate some input here.

Quoted 8 lines

Renaming flie:
mv randomfile.xml random.xml

Diffing:
git diff -M --name-status HEAD

Output:
D randomfile.xml

git doesn't know about random.xml here, which you can change like so:

git add -N random.xml

Then git diff -M --name-status HEAD will show the rename.

Alternatively, you could have used "git mv randomfile.xml random.xml" which would have staged that move in the index already. (More exactly:
the content changes, not the move as such)

Michael

#3 lore raw
In reply to jateeq
Quoted 8 lines · jateeq

Renaming flie:
mv randomfile.xml random.xml

Diffing:
git diff -M --name-status HEAD

Output:
D randomfile.xml

random.xml is an untracked file, thus ignored. You need to add -N it first.

Andreas.

Signature · 3 lines
Andreas Schwab, [email protected]
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."