Read more

Git commands to discard local changes

Felix Eschey
September 20, 2022Software engineer at makandra GmbH

Use case

You have uncommited changes (you can always check by using git status), which you want to discard.

Context

Illustration web development

Do you need DevOps-experts?

Your development team has a full backlog? No time for infrastructure architecture? Our DevOps team is ready to support you!

  • We build reliable cloud solutions with Infrastructure as code
  • We are experts in security, Linux and databases
  • We support your dev team to perform
Read more Show archive.org snapshot

Now there are several options to discard these depending on your exact situation.
The headlines will differentiate the cases whether the files are staged or unstaged.

  1. Staged and unstaged changes
  2. Staged changes
  3. Unstaged Changes

Staged and unstaged changes

Revert all changes to modified files (tracked and untracked)

git reset --hard

If you might want to use the changes later on

git stash will add the changes to the stash, reverting the local repository to HEAD.

From there on you have several options what you can do with the changes, most widely used are probably

  • git stash apply to apply your stashed changes
  • git stash drop to delete your stashed changes
  • git stash pop to apply your staged changes and delete them at the same time

Revert back all uncommitted tracked changes made in your local repository

git checkout [path to file]

  • Might be as simple as git checkout .

Revert to the state of a specific commit:

git checkout [commit hash] [file path], where the commit hash can be found by using git log

Revert to the state of a specific branch:

You can use this command to checkout files from another branch if you might want to revert to this state by using git checkout <other-branch-name> -- [path]

Staged changes

Unstage all staged files

  • git reset HEAD [file path]
    • [path to file] is optional
  • git restore --staged [file path]...
    • When you have merged your branch you can use --merge flag to recreate the conflicted state in the unmerged paths.

Now you can use any command to discard unstaged changes.

Unstaged Changes

Remove all untracked files and directories

git clean -fd

Info

If you want to remove ignored files as well, use git clean -fdx.

Revert the changes only within a specific path

git checkout -- [path]

  • Path could be . for the current working directory or any actual path (e.g. app/views/some_model/index.html.erb) were you want to revert the changes

  • You can list the files that will be reverted by checking git checkout --

Special path options:

  • git checkout -- * the star checks all files in current directory and recursively in subdirectories.

  • git checkout -- '**/*.rb' checks for the given pattern

  • git checkout -- :/ to checkout all files across the whole repository

Restore a specific file / folder

git restore [file path]

  • . for complete directory

Info

  • By using the --patch (or just -p) flag you can restore change selectively in the command line.
  • You could specify a different source as well by using -s flag

For more details check the card on Git restore.


Also see

Felix Eschey
September 20, 2022Software engineer at makandra GmbH
Posted by Felix Eschey to makandra dev (2022-09-20 08:53)