nacho4d
nacho4d

Reputation: 45158

Discard changes in one single line

I've noticed that in Tower (Git client for the Mac) the user can discard changes even line by line. I wonder how could this be done using the command line? or maybe is something special of Tower?

I frequently find myself in this case:

@@ -391,7 +392,7 @@ extern BOOL validateReceiptAtPath(NSString *path);

       NSURL *url = [self fileURL];
        if (url != nil) {
                NSRect readFrame = [self _readPreferenceOfFileAtURL:url];
-               
+
                for (NSScreen * screen in [NSScreen screens]) {
                        NSRect screenVisibleRect = [screen visibleFrame];
                        ...

See how I have one + and one - ? I would like to discard it so my commit has the minimum changes (hence less possibilities of conflicts and easier review)

:)

Upvotes: 31

Views: 19617

Answers (4)

igorw
igorw

Reputation: 28269

This is called interactive staging and can be done using git add -i or git add -p. See the git-add manpage, pro git and the Git Community Book for more information.

EDIT:

To interactively unstage a file, you can use:

git checkout -p HEAD

Also see this SO question: Undo part of unstaged changes in git

Upvotes: 36

Hrishikesh Kadam
Hrishikesh Kadam

Reputation: 37392

To interactively unstage a file use:

git add -i

then you will get following options -

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help

Use 3rd option revert to unstage files

Read more here - https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging

Upvotes: 1

Robert Siemer
Robert Siemer

Reputation: 34771

To undo hunks use

git reset --patch

It’s a very hidden feature. You can stage hunk by hunk with git add --interactive, but you can’t unstage this way. git add also features the option --patch which is like --interactive, but goes directly to the “patch” menu point (otherwise you have to hit pENTER).

git reset does not mirror the --interactive option, but has --patch.

Upvotes: 7

Colin Hebert
Colin Hebert

Reputation: 93197

You can use git add -e to edit your file right before staging it.

Upvotes: 2

Related Questions