Why is git ignoring my changed file?

前端 未结 9 1158
南旧
南旧 2021-02-04 05:22

I make an arbitrary change to a file within my git working directory.

git status does not recognized that the file has changed.

git add /path

相关标签:
9条回答
  • 2021-02-04 06:18

    Also make sure that you have not manually updated the index to assume that the changed file(s) are unchanged like so:

    git update-index --assume-unchanged path/to/file
    

    As dumb as it sounds I did that, then a few days later made changes to the file and could not figure out why git was not tracking it. I tried all of the above suggestions, and kept pulling my hair out b/c the changed file was not listed in any .gitignore or exclude files.

    If you've told git to assume the file is unchanged, you will have to:

    git update-index --no-assume-unchanged path/to/file
    

    or just re-clone the repo like I ended up doing before I remembered what I had done...

    0 讨论(0)
  • 2021-02-04 06:18

    Turns out I added skip-worktree on my file [1]

    git update-index --skip-worktree path/to/file
    

    and forgot. You can undo this with:

    git update-index --no-skip-worktree path/to/file
    

    ls-files with -v revealed the status of the file in my case:

    git ls-files -v | grep path/to/file
    S path/to/file
    

    The letters git ls-files -v will prefix with are and mean:

    # H: cachead
    # S: skip-worktree
    # M: unmerged
    # R: removed/deleted
    # C: modified/changed
    # K: to be killed
    # ?: other
    # lowercase letter: assume-unchanged
    

    To identify your issue

    Is the file ignored by git?

    git check-ignore * **/* | grep path/to/file
    git ls-files --exclude-standard --ignore
    

    If the file is listed, there is an ignore rule somewhere that is excluding it.[2] [3] Find it in one of these files:

    less .gitignore
    less ~/.gitignore
    less %USERPROFILE%\.gitignore # <- Probably the same file as the above one
    less $( git config --global core.excludesfile )
    less $( git config --system core.excludesfile )
    less ${GIT_DIR:-.git}/exclude
    

    Is the file flagged assume-unchanged

    git ls-files -v | grep path/to/file
    

    If the file is prefixed with a lower case letter, it is flagged with assume-unchanged. Fix it with:

    git update-index --no-assume-unchanged path/to/file
    

    Is the file flagged skip-worktree

    git ls-files -v | grep path/to/file
    

    If the file is prefixed with S, it is flagged with skip-worktree. Fix it with:

    git update-index --no-skip-worktree path/to/file
    
    0 讨论(0)
  • 2021-02-04 06:19

    Check using

    $ git ls-files --exclude-standard --ignore
    

    if the file is truly not excluded (there are other exclude files than only .gitignore).

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