X

Git Guide: 05 Managing Files (Removing and Moving files)

Introduction

In Git, managing files goes beyond just tracking changes. You may need to remove or move files as your project evolves. Understanding how Git handles file deletions and renaming is crucial to maintaining a clean and efficient repository. This guide covers different scenarios of removing and moving files in Git, including the impact of using rm versus git rm, and how to use git mv effectively.


Removing Files in Git

Scenario 1: Removing a File from the Working Directory Only

If you delete a file manually using the rm command:

rm file.txt

Git will detect that the file has been removed but will not automatically stage this change. Running git status will show:

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
    deleted:    file.txt

To stage this removal, you need to explicitly tell Git:

git add file.txt

Alternatively, you can use git rm, which removes the file and stages the change in one step.

Scenario 2: Removing a File from Both the Working Directory and Staging Area

Using git rm ensures that the file is deleted from both locations:

git rm file.txt

Running git status will now show:

Changes to be committed:
  deleted:    file.txt

Then commit the changes:

git commit -m "Remove file.txt"

Scenario 3: Removing a File from the Staging Area Only (Keep It Locally)

If you added a file to staging but want to remove it without deleting it locally, use:

git reset HEAD file.txt

This will unstage the file while keeping it in your working directory.

Scenario 4: Removing All Untracked Files

To remove untracked files (files not added to Git), use:

git clean -f

For directories, add the -d flag:

git clean -fd

Use git clean -n to preview what will be deleted.


Moving and Renaming Files in Git

Scenario 1: Renaming a File with mv

If you rename a file using the system command:

mv old_name.txt new_name.txt

Git will detect the rename as a deletion and an addition. Running git status will show:

Changes not staged for commit:
  deleted:    old_name.txt
  new file:   new_name.txt

To stage the rename manually:

git add old_name.txt new_name.txt

Scenario 2: Renaming a File with git mv

Using git mv automatically stages the change:

git mv old_name.txt new_name.txt

Running git status will now show:

Changes to be committed:
  renamed: old_name.txt -> new_name.txt

Then commit the rename:

git commit -m "Rename old_name.txt to new_name.txt"

Scenario 3: Moving Files Between Directories

If you move a file manually:

mv file.txt new_directory/

Git sees this as a deletion and an addition. Stage it with:

git add file.txt new_directory/file.txt

Or use git mv for an automatic rename and stage:

git mv file.txt new_directory/

Then commit:

git commit -m "Move file.txt to new_directory/"

Listing Tracked Files with git ls-files

The git ls-files command lists all tracked files in the repository. It is useful for debugging, scripting, and managing large projects.

Basic Usage

git ls-files

Lists all files tracked by Git.

Listing Only Modified Files

git ls-files -m

Shows only modified files.

Listing Untracked Files

git ls-files --others --exclude-standard

Shows untracked files while respecting .gitignore.


Conclusion

Understanding how to properly remove and move files in Git helps keep your repository clean and organized. Using git rm and git mv ensures that Git tracks these changes correctly. Additionally, git ls-files provides insight into the files Git is currently tracking.

🚀 Happy coding!

DeaDSouL: A big fan of UNIX & Linux.. Who adores programming..
Related Post