Hi Harry,

On Wednesday, June 14, 2017 at 6:12:28 PM UTC+2, Harry wrote:
>
> I had posted my question earlier on StackOverflow, here: 
>     
> https://stackoverflow.com/questions/44543219/git-revert-unable-to-undo-an-individual-commit-even-in-a-simple-case
>

I`d say you got a pretty straight answer there already, but let`s try to 
address the questions you`ve raised here as well.


*1. *Would having a new option (such as *--ignore-patch-context *) while 
> doing *git revert* make sense?
>

While being possible, whether it would make sense is arguable, as using 
context-free patches is already discouraged as unsafe in general (see 
*git-apply 
--unidiff-zero*[1] 
<https://git-scm.com/docs/git-apply#git-apply---unidiff-zero>).

But, as it`s already implemented for `git-apply`, it might make sense to 
have it for `git-revert` as well, being noted as discouraged in the same 
manner...? And I guess nobody needed it much so far, thus it`s not 
implemented yet?

That said, you`re free to bring the discussion to the main *Git mailing 
list*[2] <g...@vger.kernel.org> (that`s where the development happens), and 
try the patch yourself :) Please note that only plain-text e-mails are 
accepted, no HTML.


This option when used would carry out the *revert* mechanically/blindly and 
> leave the result in an uncommitted state (with maybe a warning on the 
> console), allowing the user to verify things for syntax and semantics 
> before committing.  
>

Now, might be you`re not seeing it that way, but this is _exactly_ what Git 
is doing - it carries out the revert mechanically/blindly and leaves the 
result in uncommited state (with merge conflict warning on the console), 
allowing the user to verify things for syntax and semantics before 
_resolving merge conflicts_ and commiting.

The only difference is that instead of your proposed _changing_ of the 
merge result by trying a lucky guess on what should the final state be 
(disregarding context, which is certainly not a blind/mechanical thing to 
do), making it harder for user to comprehend what actually happened, it 
_really_ does its thing blindly (respecting the context), taking both sides 
of the change (before/after) and leaving them as-is for the user to make 
sense of it.

For "simple case" you`re discussing here (simple for human, that is, still 
not for a machine), it`s trivial for a user to make sense of the merge 
conflicts and resolve them correctly (and easily/quickly), and you even 
have various GUI tools to help if raw conflict markers confuse you.


All this said, let me tell you that what you want is actually already 
possible with Git... ;) Well, might be not as directly as you hoped for, 
but instead of your:

(*1*) $ git revert master^^

... step, what you could try doing is this:

(*2*) $ git show master^^ >bug.patch
(*3*) $ git apply --reverse --unidiff-zero bug.patch

Command on line (*2*) creates a "bug.patch" file holding the diff/patch 
that "bug" commit introduced. Command on line (*3*) applies this patch, but 
in reverse (note the `--reverse` parameter), so instead of adding the "Bug" 
line it removes it, and `--unidiff-zero` parameter tells it to disregard 
context lines - which is exactly what you`re looking for... :) Now you can 
review the change, and commit it.

For a safety measure, please note again that usage of context-free patches 
is discouraged, being more error-prone.


2. Is there any documentation where such details of the operations (such as 
> *revert*, *merge, *...) are described?
>

Not sure if this is what you have in mind, but there`s Git *reference 
manual*[3] <https://git-scm.com/docs> (holding more info on *git-revert*[4] 
<https://git-scm.com/docs/git-revert> and *git-merge*[5] 
<https://git-scm.com/docs/git-merge> as well).

[1] https://git-scm.com/docs/git-apply#git-apply---unidiff-zero
[2] g...@vger.kernel.org
[3] https://git-scm.com/docs
[4] https://git-scm.com/docs/git-revert
[5] https://git-scm.com/docs/git-merge

Regards,
Buga

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to