Reputation: 45158
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
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
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
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
Reputation: 93197
You can use git add -e
to edit your file right before staging it.
Upvotes: 2