git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Reset by checkout?

From
ANAtsushi Nakagawa <atnak@chejz.com>
Date
Jun 7, 2014, 04:54 UTC
Message-ID
<20140607135439.7893.B013761@chejz.com>
In-Reply-To
<538AE814.2010407@bracey.fi>
Kevin Bracey <kevin@bracey.fi> wrote:
Show 20 quoted lines
> On 01/06/2014 07:26, Atsushi Nakagawa wrote:
> > Kevin Bracey <kevin@bracey.fi> wrote:
> >> The original "git reset --hard" used to be a pretty top-level command.
> >> It was used for aborting merges in particular. But I think it now
> >> stands out as being one of the only really dangerous porcelain
> >> commands, and I can't think of any real workflow it's still useful
> >> for.
> > My thoughts exactly.  I think the 'reset --soft/--mixed/--hard' pattern
> > is so ingrained, that many people just don't realize there's a safer
> > alternative.  (I've heard work mates on more than one occasion
> > recommending 'reset --hard' as the go-to command for discarding commits.)
> >
> > I believe this is likely because many third party GUI tools just don't
> > support 'reset --keep', and these tools present a "Reset..." dialog with
> > the de facto Soft/Mixed/Hard options.  (Even 'gitk' does this.)
> True on the GUI - "hard" really needs demotion.
> 
> It would help if the documentation explained better straight off what
> the different reset modes are intended /for/ in a more practical way,
> rather than the technical jargon.

On one hand, I agree that improving man git-reset and making it easier to understand would be of benefit.

However, one of the main culprits of confusion here seems to be the mere existance of '--keep', which is somewhat of a conceptual black sheep.

The --soft/--mixed/--hard trio seems quite easy to explain, /if/ you didn't need to also explain --keep...

To that end, I'm wondering if it's better to just deprecate 'reset --keep' and shift the use-case over to 'checkout':

checkout [-u|--update] [<commit>|<branch>]
-u
--update
    Rather than checking out a branch to work on it, check out a commit
    and reset the current branch to that commit.
    This is functionally equivalent to 'checkout -B CURRENT_BRANCH <commit>'.
    (...Maybe a warning here about commits becoming unreachable...)

Then, as an added bonus, anything I've staged is kept intact. *And*, I can attempt 'checkout -u --merge' if I'm feeling particulary careless.

Show 9 quoted lines
> --hard
>     All [] changes are dropped[] and the [working tree] and index are
>     forcibly reset to the [state of <commit>].  Note that this is
>     dangerous if used carelessly.  ALL uncommitted changes to ALL
>     tracked files will be lost[].
>
>     Older documentation often recommends "git reset --hard" to
>     undo commits; the newer "--keep" option is [safer and is now the
>     recommended] alternative [for use in this situation].

I like this explaination of '--hard' and prefer it over current, which doesn't much explain the gravity of the command. I've made some edits above.

> --merge
>     Performs the operation of "git merge --abort", intended for use
>     during a merge resolution - see git-merge(1) for more information.
>     This form is not normally used directly.

Aha, so that's what that's for. I couldn't really understand the explanation in the current manpage, but your version at least tells me that it's an option I don't need to worry about.

Cheers,
-- 
Atsushi Nakagawa
<atnak@chejz.com>
Changes are made when there is inconvenience.
Previous: Felipe ContrerasNext: Philip Oakley
Message 10 of 18 in “Reset by checkout?”
  1. Atsushi NakagawaMay 31, 2014
  2. Andreas SchwabMay 31, 2014
  3. Atsushi NakagawaJun 1, 2014
  4. Kevin BraceyMay 31, 2014
  5. Atsushi NakagawaJun 1, 2014
  6. Kevin BraceyJun 1, 2014
  7. Junio C HamanoJun 2, 2014
  8. Kevin BraceyJun 3, 2014
  9. Felipe ContrerasJun 3, 2014
  10. Atsushi NakagawaJun 7, 2014
  11. Philip OakleyJun 7, 2014
  12. Kevin BraceyJun 9, 2014
  13. Atsushi NakagawaJun 7, 2014
  14. Felipe ContrerasMay 31, 2014
  15. Felipe ContrerasMay 31, 2014
  16. Atsushi NakagawaJun 1, 2014
  17. Junio C HamanoJun 2, 2014
  18. Junio C HamanoJun 2, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.