'git diff' doesn't give any output

前端 未结 9 2144
迷失自我
迷失自我 2020-12-08 09:11

If I run git diff I would expect to see a list of changes of my working directory relative to whatever had been committed before (or a list of the working direc

相关标签:
9条回答
  • 2020-12-08 09:43

    Why do you get no git diff output before adding?

    Git does not treat files in the filesystem as automatically included in the version control system. You have to add things explicitly into the Git repository (as you are doing by adding the current directory with git add .).

    There is no output to git diff because Git doesn't see any changes inside your repository, only files outside the repository, which it considers 'untracked' and so ignores when generating a diff.

    I found this one of the key differences to version control systems like SVN (along with staging and ignoring directories).

    If you want the untracked files to be included, git add them.

    If you don't want them in your repository, add them to your .gitignore (see git ignore --help). This is good for C object files or Python .pyc files.

    Why don't I get git diff output after adding?!

    So this is slightly different. If you do git status you will see the file is now in the staging area. This is the area for files that you are about to commit.

    When you git add a new file into the Git repository, it skips the working copy and goes straight into the staging area. This make sense in a way, and git add always moves files into staging area whether it is tracked or untracked.

    To see the differences between the last check in and the staging area do git diff --cached.

    To see the differences between the staging area and your working copy, do git diff. If there is nothing in the staging area then this is the same as doing a diff between the last check in and your working copy.

    0 讨论(0)
  • 2020-12-08 09:46

    1.How, in plain English, does git diff work?

    How git diff works all depends on what parameters you pass to it.

    Depending on the parameters, git diff will show the changes between two commits, or between a commit and the working tree, etc...

    For example, git diff, git diff --staged and git diff HEAD are described further below.

    2.How can I show a diff of all the changes I've made (unstaged and staged)?

    By using both commands git diff HEAD and git diff --staged.

    But in the case of a repository just created with git init, the question doesn't really make sense and git diff HEAD cannot be used: the history being empty, there's no commit and no HEAD yet!


    • git diff shows the changes in your working tree relative to the last commit, only for tracked files

    • git diff HEAD shows the changes in your working tree relative to the last commit (includes files that are not tracked)

    • git diff --staged (or its synonym git diff --cached) shows the changes you staged for the next commit relative to the last commit

    There are many other ways to invoke git diff, for comparing arbitrary commits or branches, etc. Invoke git help diff to read more about it.

    0 讨论(0)
  • 2020-12-08 09:48

    The first things is that I suggest you to save your file before using "git diff" command to make changes.

    0 讨论(0)
  • 2020-12-08 09:49

    You don't need any additional flags for git diff to work. First you create a file, and add it to the git repo with git add to staging and or execute a git commit to get it into your repository. Now, go to the file and make a change to it and save it. Just put a sentence in there stating "I will run the "git diff " command right after I save it". Save it. It is at that point you will see the difference when you run the git diff command. It will show the recent changes prior to executing a "git commit" or if you had only put the file initially into staging.

    \TestGit>git diff File2.txt
    diff --git a/File2.txt b/File2.txt
    index e2ba019..eff7299 100644
    --- a/File2.txt
    +++ b/File2.txt
    @@ -6,4 +6,6 @@ File two. Which is the second file that I will NOT add with the first file File1
    
     The goal here is to add the File1 but not the File 2
    
    -using git add File1.txt
    \ No newline at end of file
    +using git add File1.txt.
    +
    +So far I have just done a git add on this file.
    \ No newline at end of file
    

    The lines with the + signs is the added content. If you use the --cached flag, and get result,s then your git status for the same file should report that the file has not been committed. Once you commit the file, you will not get any output for git diff. even with the --cached flag.

    0 讨论(0)
  • 2020-12-08 09:54

    This is indeed related to the pager settings.

    I found that including '-e' in

    export PAGER=less LESS=-cse
    

    helps.

    Without the '-e', less will quit on the first page. Somehow git will not even bother to display output in that case.

    0 讨论(0)
  • 2020-12-08 09:56

    Basing on your git status output there is nothing to show for git diff without additional parameters. There is nothing to show for git diff --cached and git diff HEAD as all of these commands rely on changes already known to Git.

    You have no staged files and no changed files from those that are under version control now.

    After you add test.txt under Git control you will get the desired output.

    Just type

    git add test.txt
    

    or

    git add .
    

    Then this file will be added under version control. And future changes of this file will be shown by git diff.

    0 讨论(0)
提交回复
热议问题