github-desktop/docs/technical/discard-changes.md
2021-11-30 11:31:19 +01:00

1.6 KiB

Discard Changes

The Discard Changes feature allows users to clean up uncommitted changes from a repository, and has evolved over time to support different workflows.

Implementation

As the implementation details of this may change over time, this section will instead describe the high-level flow of the implementation.

You can view a reference of this function here.

The Discard Changes flow is composed of multiple steps.

Moving Files to Trash

Electron provides the shell.trashItem(fullPath) API to manage moving files into the OS-specific trash.

Desktop uses this API to move all new or modified files out from the repository as a way to preserve changes, in case the user wishes to recover them later. Files moved to the Trash are moved over as-is, so ensure you have the ability to view hidden files if you wish to recover files that are prefixed with ..

Reset Paths

The next step is identifying any files that have been listed for discard that are also staged in the index. While Desktop doesn't stage files itself, a user might be using other tools alongside Desktop, so this is a sanity check before proceeding to the next stage.

Git CLI equivalent: git reset HEAD -- [path]

Checkout Paths

The last step is to replace the modified files in the working directory with whatever is currently in the index - this ensures that Desktop only replaces files that the user has chosen to discard.

Git CLI equivalent: git checkout-index -f -u -- [path]