# How to Throw Away Local Commits in Git

To discard or throw away local commits in Git, you have a few options depending on your specific scenario:

### Option 1: Discard Uncommitted Changes

If you haven't yet committed your changes and want to discard them completely:

```bash
git reset --hard HEAD
```

This command will reset your working directory and staging area to match the `HEAD` commit, effectively discarding all uncommitted changes.

### Option 2: Reset to a Specific Commit

If you've already committed your changes and want to discard all commits made after a certain commit:

```bash
git reset --hard <commit>
```

Replace `<commit>` with the commit hash or reference to which you want to reset. This will reset your branch pointer to the specified commit and discard all commits made after it.

### Option 3: Create a New Branch without the Commits

If you want to keep your changes but don't want them in your current branch's history, you can create a new branch from a commit prior to the unwanted commits:

```bash
git checkout -b new-branch <commit>
```

Replace `new-branch` with the name of the new branch and `<commit>` with the commit hash or reference you want to base the new branch on. This will create a new branch without the unwanted commits.

### Option 4: Use the Reflog

If you've already made commits and want to "throw away" them by reverting your branch to a previous state:

```bash
git reflog
```

Find the entry corresponding to the state you want to revert to and note its commit hash. Then, reset your branch to that commit:

```bash
git reset --hard <commit>
```

Replace `<commit>` with the commit hash you noted from the reflog. This will move your branch pointer back to the specified commit, effectively "throwing away" the commits made after it.

### Note:

- Be cautious when using these commands as they permanently discard commits and changes.
- Make sure to back up any important changes before executing these commands, especially if you're unsure about the consequences.
- If the commits you want to discard have already been pushed to a remote repository, you may need to use `git push --force` to update the remote branch with your changes.