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

Re: git undo # last command

From
STSaša Tomić <tomic80@gmail.com>
Date
Aug 16, 2013, 14:21 UTC
Message-ID
<CAAUyY9DqCrpMJPKKmzLGWVkoJRPfA5URLQz0uyTLZCPe6QKe5w@mail.gmail.com>
In-Reply-To
<20130816132612.GF20138@sigill.intra.peff.net>
On Fri, Aug 16, 2013 at 3:26 PM, Jeff King <peff@peff.net> wrote:
Show 26 quoted lines
> On Fri, Aug 16, 2013 at 10:55:06AM +0200, Saša Tomić wrote:
>
>> it just occurred to me -- the command that I would REALLY like to have
>> is simple:
>>
>>   git undo
>>
>> which 'undo'es the last action that has not been pushed yet --
>> whichever the action is. Similarly to the 'back' button in the
>> browser.
>
> One problem with such simplicity is that you need to define what an
> "action" is. If I make a commit, the undo is probably "reset HEAD@{1}".
> If I fetch a ref, would undo move backwards? What if I fetch multiple
> refs with one command; do we undo all of them? How about during a
> multiple-command operation, like a rebase? Does an undo affect the last
> commit, or the whole rebase?
>
> I think these questions can be answered (though I am not sure of the
> best answer for most of them, nor even if there is a single answer that
> covers all situations), but I think a starting point for any "undo"
> command would be coming up with a list of what constitutes an action,
> how we record the list of actions, and then an appropriate "undo"
> reaction for each action.
>
> -Peff

Simplicity rarely comes for free. But simplicity may not mean the same to a new git user, and to an experienced git user or developer.

The beauty of "undo" operation/action is that there is only one command to be learned. Whatever you do, you can "undo". git commit ==> git reset --soft HEAD^ git add <file> ==> git reset HEAD <file> git add <directory> ==> git rm -r --cached <directory>

However, the command that you have to do may not be easy to find in documentation or online.

A simple workaround, that I several times employed, is to make a backup of the repo, and to play with the repo after that. If anything goes wrong, I restore the backup.

But git should not force me to do this. Git clearly can do more and better.

Anyway, I believe that "undo" should revert the *last* command typed in and executed by the user, even if it's a multi-step operation such as rebase. Of course, it would be of great help even if a user has to run "git undo" several times for one "git rebase". You're certainly more experienced with git under the hood, so you know which one is easier to implement.

I would be happy to help in making a list of actions and corresponding undo "reactions".

-- st
Previous: Jeff KingNext: Fredrik Gustafsson
Message 3 of 4 in “git undo # last command”
  1. Saša TomićAug 16, 2013
  2. Jeff KingAug 16, 2013
  3. Saša TomićAug 16, 2013
  4. Fredrik GustafssonAug 16, 2013

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.