How can I delete a file from a Git repository?

后端 未结 24 1993
無奈伤痛
無奈伤痛 2020-11-22 13:41

I have added a file named \"file1.txt\" to a Git repository. After that, I committed it, added a couple of directories called dir1 and dir2

相关标签:
24条回答
  • 2020-11-22 13:59

    Note: if you want to delete file only from git use below:

    git rm --cached file1.txt
    

    If you want to delete also from hard disk:

    git rm file1.txt
    

    If you want to remove a folder(the folder may contain few files) so, you should remove using recursive command, as below:

    git rm -r foldername
    

    If you want to remove a folder inside another folder

    git rm -r parentFolder/childFolder
    

    Then, you can commit and push as usual. However, if you want to recover deleted folder, you can follow this: recover deleted files from git is possible.

    From doc:

    git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​
    

    OPTIONS

    <file>…​

    Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you
    

    may need to shell-escape them. A leading directory name (e.g. dir to remove dir/file1 and dir/file2) can be given to remove all files in the directory, and recursively all sub-directories, but this requires the -r option to be explicitly given. -f --force

    Override the up-to-date check.
    

    -n --dry-run

    Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.
    

    -r

    Allow recursive removal when a leading directory name is given.
    

    --

    This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for
    

    command-line options). --cached

    Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.
    

    --ignore-unmatch

    Exit with a zero status even if no files matched.
    

    -q --quiet

    git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.
    

    Read more on official doc.

    0 讨论(0)
  • 2020-11-22 13:59

    According to the documentation.

    git rm --cached file1.txt

    When it comes to sensitive data—better not say that you removed the file but rather just include it in the last known commit:

    0. Amend last commit

    git commit --amend -CHEAD
    

    If you want to delete the file from all git history, according to the documentation you should do the following:

    1. Remove it from your local history

    git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \  --prune-empty --tag-name-filter cat -- --all
    # Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename
    
    1. Don't forget to include this file in .gitignore (If it's a file you never want to share (such as passwords...):
    echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
    git add .gitignore
    git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"
    

    3. If you need to remove from the remote

    git push origin --force --all
    

    4. If you also need to remove it from tag releases:

    git push origin --force --tags
    
    0 讨论(0)
  • 2020-11-22 14:00

    I tried a lot of the suggested options and none appeared to work (I won't list the various problems). What I ended up doing, which worked, was simple and intuitive (to me) was:

    1. move the whole local repo elsewhere
    2. clone the repo again from master to your local drive
    3. copy back the files/folder from your original copy in #1 back into the new clone from #2
    4. make sure that the problem large file is either not there or excluded in the .gitignore file
    5. do the usual git add/git commit/git push
    0 讨论(0)
  • 2020-11-22 14:02

    Additionally, if it's a folder to be removed and it's subsequent child folders or files, use:

    git rm -r foldername
    
    0 讨论(0)
  • 2020-11-22 14:03

    go to your project dir and type:

    git filter-branch --tree-filter 'rm -f <deleted-file>' HEAD
    

    after that push --force for delete file from all commits.

    git push origin --force --all
    
    0 讨论(0)
  • 2020-11-22 14:04

    If you have the GitHub for Windows application, you can delete a file in 5 easy steps:

    • Click Sync.
    • Click on the directory where the file is located and select your latest version of the file.
    • Click on tools and select "Open a shell here."
    • In the shell, type: "rm {filename}" and hit enter.
    • Commit the change and resync.
    0 讨论(0)
提交回复
热议问题