I've noticed that in Tower (Git client for the Mac) the u开发者_开发知识库ser 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)
:)
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
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
.
You can use git add -e
to edit your file right before staging it.
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
精彩评论