-
Git reset is the command that allows you
to shape history in your repository.
-
Whether you're undoing some changes
or crafting your commits differently,
-
this is the command for you.
-
♪ (bossa music) ♪
-
Welcome to the episode of Git and GitHub Foundations on the reset command.
-
This command has a lot of power,
and a lot of modes.
-
Yeah, there's going to be three modes
we're going to be working with here.
-
There's going to be soft;
mixed, or the default; and hard.
-
♪ (music) ♪
-
these adjectives are pretty descriptive,
-
starting with the one
that's the default, mixed.
-
It alters both the history
and the working directory.
-
So mixed, both things.
-
And soft is going to take
one or multiple commits
-
and put all of their changes
back into the staging area
-
to allow you to continue to craft
a new commit out of that.
-
Hard, on the other hand,
is a destructive operation
-
that's meant to erase things
that you no longer wish to keep.
-
So with all three of these in our stable,
-
let's look at mixed first.
-
Mixed is the recommendation
-
that gets most often shown
to new Git users
-
because it shows up
in the status command.
-
When you have changes in the staging area
and you say git status,
-
we see a Git reset head.
-
That allows us to take those changes
out of the staging area
-
and put them back
into the working directory
-
with the mixed option.
-
Soft is the way
that I take some changes
-
that might have gotten
too granular in nature.
-
One, two, three, four, five commits
-
that I then realize all belong
in one transaction,
-
and to bring them all together
by a git reset --soft HEAD~5
-
the most recent five commits.
-
So with that command of using soft
-
you can take
all five of those commits
-
and kind of squash them down
into the staging area as one commit.
-
Pretty useful for reshaping history,
-
but reshaping history goes
to the far end of the spectrum
-
to throw away commits
that just don't add value.
-
You don't want to send them,
transmit them, or share them with others.
-
That's where hard comes into play.
-
If you completely want to throw away
some of your work,
-
maybe you're trying out some change
that just didn't work out,
-
you can use the git reset --hard
to throw those commits away completely.
-
People might ask, then why
would you make a commit?
-
But Git provides you
a really nice safety net
-
through the reflog command
that we'll look at in a future episode
-
that motivates you to make
checkpoints with commits,
-
and knowing that you have
hard at your disposal,
-
you can clean that history up
anytime you like.
-
♪ (music) ♪
-
There is one other cousin command
that is often talked about with reset
-
and that's the checkout command.
-
The checkout command
is of a different granularity than reset,
-
which typically operates
on the entire history of a repository.
-
Checkout is focused more
on a directory or a file level precision.
-
Instead of undoing or changing
an entire commit,
-
we can go back in history
to a specific file at a commit
-
and pull that file and its version
back to our current working directory.
-
Clear communication is the goal
of all Git repository history.
-
So whether it's git reset --hard,
reset --soft, reset --mixed,
-
or the more precise checkout command,
-
use these to provide clear intent
about your changes to your colleagues.
-
Git reset is a tool that can be
a little bit intimidating
-
to new users of Git.
-
But it can be a powerful tool
to have at your disposal
-
for crafting beautiful repository history.
-
Thanks for watching another episode
of Git and GitHub Foundations on reset.
-
As always, don't forget to subscribe
to any of our channels on the side her.
-
Questions or comments?
Put those down below
-
or check out one
of our other educational topics
-
on Git and GitHub
here at the bottom.
-
♪ (music) ♪