Register to get access to free programming courses with interactive exercises

Working Directory Git fundamentals

After cloning hexlet-git, we can see the .git directory inside and the files we added. What happens if you try to delete one of the files?

rm PEOPLE.md
git status

On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    deleted:    PEOPLE.md

no changes added to commit (use "git add" and/or "git commit -a")

Git tells you when a file has been deleted and offers commands to restore or commit changes. It's worth stopping here and diving a bit into how git works. How does it even know that the file has been deleted?

Inside the project directory, we can see the project files on one side and the .git directory on the other. The repository is the .git directory. It stores all the information about what changes were made, as well as the changes themselves. But everything outside is the so-called working directory. These files (and directories, if any) are extracted from .git at the time of cloning. Every time we make a change to the working directory, git compares the modified files with the files inside .git, i.e., their state at the time of the last commit. If there are changes to the last committed version, git will tell us in the git status output.

This is very easy to see if you follow git's advice in the output above and restore the deleted file:

git restore PEOPLE.md
git status

On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

# The file itself is back where it was on the last commit

You can delete the entire working directory and then restore it without any problems. This helps us achieve something very important - we've made it possible to quickly restore the latest version of the code if the changes we made don't suit us anymore. Or we can commit them, if necessary:

rm PEOPLE.md
# Any change must be added to the index
git add PEOPLE.md
git commit -m 'remove PEOPLE.md'

[main e15afd2] remove PEOPLE.md
1 file changed, 1 deletion(-)
delete mode 100644 PEOPLE.md
# This file is now gone from the working directory

There's something important you need to take note of. Whether we delete, add or change a file, the commit procedure does not change. After changes are made, we always perform a git add, which prepares the change for a commit (it doesn't add a file!), then we perform the commit itself.

By the way, git has a command called git rm that combines deletion and commit preparation:

git rm PEOPLE.md
# it's the same as rm + git add

Do it yourself

  1. Follow all of the steps in the lesson
  2. Delete the NEW.md file and make a commit
  3. Add an INFO.md file with the text git is awesome! and make a commit
  4. Upload the changes to Github using git push
  5. Refresh the repository page on Github and see the changes

Sign up

Programming courses for beginners and experienced developers. Start training for free

  • 130 courses, 2000+ hours of theory
  • 1000 practical tasks in a browser
  • 360 000 students
By sending this form, you agree to our Personal Policy and Service Conditions

Our graduates work in companies:

Bookmate
Health Samurai
Dualboot
ABBYY