* git add -p and unresolved conflicts @ 2012-03-28 9:51 Erik Faye-Lund 2012-03-28 15:10 ` Junio C Hamano 0 siblings, 1 reply; 21+ messages in thread From: Erik Faye-Lund @ 2012-03-28 9:51 UTC (permalink / raw) To: Git Mailing List I'm running git version 1.7.9.msysgit.0.390.g01fca.dirty, and I've noticed a puzzling behavior with "git add -p" on a conflicted file: it seems to simply spew the diff and exit the process. Is this the expected behavior? It doesn't seem very useful to me... Here's how to reproduce the behavior: git init /tmp/git-add--p-conflict cd /tmp/git-add--p-conflict/ echo "foo" > bar.txt git add bar.txt git commit -m. echo "bar" >> bar.txt git stash save echo "baz" >> bar.txt git commit -am. git stash pop git add -p bar.txt ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 9:51 git add -p and unresolved conflicts Erik Faye-Lund @ 2012-03-28 15:10 ` Junio C Hamano 2012-03-28 15:21 ` Matthieu Moy 2012-03-28 15:33 ` Erik Faye-Lund 0 siblings, 2 replies; 21+ messages in thread From: Junio C Hamano @ 2012-03-28 15:10 UTC (permalink / raw) To: kusmabite; +Cc: Git Mailing List Erik Faye-Lund <kusmabite@gmail.com> writes: > I'm running git version 1.7.9.msysgit.0.390.g01fca.dirty, and I've > noticed a puzzling behavior with "git add -p" on a conflicted file: it > seems to simply spew the diff and exit the process. Yeah, when I wrote the 'p'atch mode in "add--interactive", I wasn't interested at all in letting it be used on a conflicted path, so that is not a designed-in behaviour but merely whatever it happens to do. So at least it should not allow the user to pick a path that has conflicts in it. What the behaviour for people who *do* want to use the patch mode for conflicted paths should be is a separate matter. As I said, I am not interested in it, so I wouldn't be the best person to design it. I mildly suspect nobody would come up with a sane behaviour, but what would I know... ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 15:10 ` Junio C Hamano @ 2012-03-28 15:21 ` Matthieu Moy 2012-03-28 19:14 ` Holger Hellmuth 2012-03-28 15:33 ` Erik Faye-Lund 1 sibling, 1 reply; 21+ messages in thread From: Matthieu Moy @ 2012-03-28 15:21 UTC (permalink / raw) To: Junio C Hamano; +Cc: kusmabite, Git Mailing List Junio C Hamano <gitster@pobox.com> writes: > I mildly suspect nobody would come up with a sane behaviour, but what > would I know... Designing a per-hunk behavior would clearly be very tricky. But a simple way to deal with this would be to show the whole-file patch, and ask "stage this file (yes/no)?". My fingers are used to typing git add -p y y y git commit and they would appreciate if it worked in the presence of conflicts. Most of the time, I have small conflicts, so a whole-file behavior wouldn't be disturbing, but I like seeing the changes before commiting them. -- Matthieu Moy http://www-verimag.imag.fr/~moy/ ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 15:21 ` Matthieu Moy @ 2012-03-28 19:14 ` Holger Hellmuth 2012-03-28 19:19 ` Junio C Hamano 2012-03-28 19:38 ` Matthieu Moy 0 siblings, 2 replies; 21+ messages in thread From: Holger Hellmuth @ 2012-03-28 19:14 UTC (permalink / raw) To: Matthieu Moy; +Cc: Junio C Hamano, kusmabite, Git Mailing List On 28.03.2012 17:21, Matthieu Moy wrote: > Junio C Hamano<gitster@pobox.com> writes: > >> I mildly suspect nobody would come up with a sane behaviour, but what >> would I know... > > Designing a per-hunk behavior would clearly be very tricky. > I don't think it's that tricky: For a conflicted file show any conflicted hunks first(!) and only provide the following options for them: q - quit, do not stage... d - do not stage this hunk nor any of the remaining hunks in the file e - manually edit the current hunk ? - print help and additionally the following three options: b - choose the base version < - choose our version > - choose their version < and > correspond to the conflict markers, alternatives would be o and t The user now has the option to remove the conflicts (through editing or choosing one of the versions) or abort adding the file. The tricky part might be sorting the hunks so that conflicts are first (depending on how the code works now), choosing the right version in a hunk (the three new options) should be relatively easy. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 19:14 ` Holger Hellmuth @ 2012-03-28 19:19 ` Junio C Hamano 2012-03-28 19:52 ` Holger Hellmuth 2012-03-28 19:38 ` Matthieu Moy 1 sibling, 1 reply; 21+ messages in thread From: Junio C Hamano @ 2012-03-28 19:19 UTC (permalink / raw) To: Holger Hellmuth; +Cc: Matthieu Moy, kusmabite, Git Mailing List Holger Hellmuth <hellmuth@ira.uka.de> writes: > I don't think it's that tricky: > ... > The tricky part might be sorting the hunks so that conflicts are first > (depending on how the code works now), choosing the right version in a > hunk (the three new options) should be relatively easy. Code it and then tell us if it is tricky or not. Until then, especially when you have to say "depending on how the code works now", implying you do not know, why should we even listen to you? ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 19:19 ` Junio C Hamano @ 2012-03-28 19:52 ` Holger Hellmuth 2012-03-29 6:08 ` Jeff King 0 siblings, 1 reply; 21+ messages in thread From: Holger Hellmuth @ 2012-03-28 19:52 UTC (permalink / raw) To: Junio C Hamano; +Cc: Matthieu Moy, kusmabite, Git Mailing List On 28.03.2012 21:19, Junio C Hamano wrote: > Holger Hellmuth<hellmuth@ira.uka.de> writes: > >> I don't think it's that tricky: I was assuming this "tricky" was about a sensible user interface. >> ... >> The tricky part might be sorting the hunks so that conflicts are first >> (depending on how the code works now), choosing the right version in a >> hunk (the three new options) should be relatively easy. > > Code it and then tell us if it is tricky or not. Until then, especially > when you have to say "depending on how the code works now", implying you > do not know, why should we even listen to you? As it is perl I'm already looking at it. I'll try to find out if my meagre programming skills can do something here. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 19:52 ` Holger Hellmuth @ 2012-03-29 6:08 ` Jeff King 2012-03-29 10:19 ` Holger Hellmuth 0 siblings, 1 reply; 21+ messages in thread From: Jeff King @ 2012-03-29 6:08 UTC (permalink / raw) To: Holger Hellmuth; +Cc: Junio C Hamano, Matthieu Moy, kusmabite, Git Mailing List On Wed, Mar 28, 2012 at 09:52:55PM +0200, Holger Hellmuth wrote: > On 28.03.2012 21:19, Junio C Hamano wrote: > >Holger Hellmuth<hellmuth@ira.uka.de> writes: > > > >>I don't think it's that tricky: > > I was assuming this "tricky" was about a sensible user interface. I think maybe the discussion elsewhere in this thread has given you a taste of the trickiness, but if you want to read more, here is a similar discussion from the same time last year (ahh, Spring, when a young man's thoughts turn to partial staging of conflicted hunks): http://thread.gmane.org/gmane.comp.version-control.git/168403/focus=168842 -Peff ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-29 6:08 ` Jeff King @ 2012-03-29 10:19 ` Holger Hellmuth 0 siblings, 0 replies; 21+ messages in thread From: Holger Hellmuth @ 2012-03-29 10:19 UTC (permalink / raw) To: Jeff King; +Cc: Junio C Hamano, Matthieu Moy, kusmabite, Git Mailing List On 29.03.2012 08:08, Jeff King wrote: > On Wed, Mar 28, 2012 at 09:52:55PM +0200, Holger Hellmuth wrote: > >> On 28.03.2012 21:19, Junio C Hamano wrote: >>> Holger Hellmuth<hellmuth@ira.uka.de> writes: >>> >>>> I don't think it's that tricky: >> >> I was assuming this "tricky" was about a sensible user interface. > > I think maybe the discussion elsewhere in this thread has given you a > taste of the trickiness, but if you want to read more, here is a similar > discussion from the same time last year (ahh, Spring, when a young man's > thoughts turn to partial staging of conflicted hunks): It already dawned on me that to add the proposed conflict resolution would also mean changing the working copy of the file which none of the other options needs. Which would change the work from (assumed) surgical changes to completely new routines and special cases and.... ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 19:14 ` Holger Hellmuth 2012-03-28 19:19 ` Junio C Hamano @ 2012-03-28 19:38 ` Matthieu Moy 2012-03-28 19:54 ` Junio C Hamano 2012-03-28 20:10 ` Holger Hellmuth 1 sibling, 2 replies; 21+ messages in thread From: Matthieu Moy @ 2012-03-28 19:38 UTC (permalink / raw) To: Holger Hellmuth; +Cc: Junio C Hamano, kusmabite, Git Mailing List Holger Hellmuth <hellmuth@ira.uka.de> writes: > and additionally the following three options: > b - choose the base version > < - choose our version > > - choose their version What does it mean to "choose" in this context? In general, it means "put this into the index", but if the file is in conflicted state, you have 3 different versions of the file in the index. And you miss the most usefull (to me at least): "choose the version in the worktree". -- Matthieu Moy http://www-verimag.imag.fr/~moy/ ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 19:38 ` Matthieu Moy @ 2012-03-28 19:54 ` Junio C Hamano 2012-03-28 20:10 ` Holger Hellmuth 1 sibling, 0 replies; 21+ messages in thread From: Junio C Hamano @ 2012-03-28 19:54 UTC (permalink / raw) To: Matthieu Moy; +Cc: Holger Hellmuth, kusmabite, Git Mailing List Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes: > And you miss the most usefull (to me at least): "choose the version in > the worktree". I tend to think that "add -p" whose sole purpose is to make partial commit is fundamentally incompatible with "am", "merge" and (mostly) "rebase", which you do not want to record partial commit. When "rebase -i" or "cherry-pick" that is used for the purpose of replaying only a part of a larger commit, letting "add -p" show the difference between "HEAD" and the working tree version, and letting the user pick hunks, would make a lot of sense, though. For such an application, however, the user could first "reset $path" and use "add -p" normally. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 19:38 ` Matthieu Moy 2012-03-28 19:54 ` Junio C Hamano @ 2012-03-28 20:10 ` Holger Hellmuth 2012-03-28 20:50 ` Junio C Hamano 2012-03-29 7:26 ` Matthieu Moy 1 sibling, 2 replies; 21+ messages in thread From: Holger Hellmuth @ 2012-03-28 20:10 UTC (permalink / raw) To: Matthieu Moy; +Cc: Junio C Hamano, kusmabite, Git Mailing List On 28.03.2012 21:38, Matthieu Moy wrote: > Holger Hellmuth<hellmuth@ira.uka.de> writes: > >> and additionally the following three options: >> b - choose the base version >> < - choose our version >>> - choose their version > > What does it mean to "choose" in this context? In general, it means "put > this into the index", but if the file is in conflicted state, you have 3 > different versions of the file in the index. The only ways to exit with the proposed reduced options is to either quit adding this file (which is comparable to Eriks option 4) or resolving all conflicts in the file thereby allowing to add this file to the index. > And you miss the most usefull (to me at least): "choose the version in > the worktree". > But the conflicted chunks are of the form "<<<< our ... |||||||||| theirs >>>>>>" in your work tree. So there are two cases: a) You have removed the markers thereby removing the conflict -> this means the chunk will not be offered to you as a conflicting chunk b) You haven't removed the markers. Then there is a choice between base, our and their version. If you had edited one of the versions between the conflict markers in your working tree without removing the markers (which wouldn't be a sensible thing) then it depends on whether the chunk in the working tree or the versions in the index are used as a basis for the choosing, but I suspect using the working tree version is easier to do. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 20:10 ` Holger Hellmuth @ 2012-03-28 20:50 ` Junio C Hamano 2012-03-28 22:50 ` Holger Hellmuth 2012-03-29 7:26 ` Matthieu Moy 1 sibling, 1 reply; 21+ messages in thread From: Junio C Hamano @ 2012-03-28 20:50 UTC (permalink / raw) To: Holger Hellmuth; +Cc: Matthieu Moy, Junio C Hamano, kusmabite, Git Mailing List Holger Hellmuth <hellmuth@ira.uka.de> writes: > But the conflicted chunks are of the form "<<<< our ... |||||||||| > theirs >>>>>>" in your work tree. So there are two cases: > > a) You have removed the markers thereby removing the conflict -> this > means the chunk will not be offered to you as a conflicting chunk > > b) You haven't removed the markers. Then there is a choice between > base, our and their version. > If you had edited one of the versions between the conflict markers in > your working tree without removing the markers (which wouldn't be a > sensible thing) then it depends on whether the chunk in the working > tree or the versions in the index are used as a basis for the > choosing, but I suspect using the working tree version is easier to > do. I think Matthieu is not thinking about the "resolve conflicted merge (or rebase, am) and make a single commit" use case, for which your "pick one of the sides" makes sense. His is more about "I like some change in that unrelated commit---while I have no intention to replay that change as a whole, I want to use "cherry-pick --no-commit" and pick only the bits out of the change that are useful for what I am doing" use case. In such a context, after resolving conflicts in the working tree, "add -p" would be a good tool to pick hunks in the diff between the HEAD and the working tree. I tend to think that use case, while valid, may be a minority case and giving a version of "add -p" to make that mode too easy to use by mistake during a true conflict resolution is inviting trouble for newbies. As I said, "reset $path" followed by regular "add -p $path" would be a usable workaround for Matthieu's workflow. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 20:50 ` Junio C Hamano @ 2012-03-28 22:50 ` Holger Hellmuth 2012-03-28 23:01 ` Junio C Hamano 0 siblings, 1 reply; 21+ messages in thread From: Holger Hellmuth @ 2012-03-28 22:50 UTC (permalink / raw) To: Junio C Hamano; +Cc: Matthieu Moy, kusmabite, Git Mailing List Am 28.03.2012 22:50, schrieb Junio C Hamano: > I think Matthieu is not thinking about the "resolve conflicted merge (or > rebase, am) and make a single commit" use case, for which your "pick one > of the sides" makes sense. His is more about "I like some change in that > unrelated commit---while I have no intention to replay that change as a > whole, I want to use "cherry-pick --no-commit" and pick only the bits out > of the change that are useful for what I am doing" use case. > > In such a context, after resolving conflicts in the working tree, "add -p" > would be a good tool to pick hunks in the diff between the HEAD and the > working tree. Ok. Something like this (which is not really that different from Eriks example, so I might still be missing something) ? git init . echo "foo" > bar.txt git add bar.txt git commit -m. git checkout -b new echo "bar" >> bar.txt git commit -am. git checkout master git reset --hard echo "baz" >> bar.txt git commit -am. git cherry-pick --no-commit new git add -p bar.txt So he would be interested in keeping his previous working tree version (identical to HEAD commit, otherwise cherry-pick fails) for conflicting chunks as they (in most cases) don't have anything to do with the chunks he is interested in. In this case that is "baz" Which would always be the "ours" side in any conflicting junks. That suggests that he could just type '<' respective 'o' whenever a conflicting junk comes up as it would be the previous working tree version ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 22:50 ` Holger Hellmuth @ 2012-03-28 23:01 ` Junio C Hamano 2012-03-28 23:05 ` Junio C Hamano 2012-03-29 1:32 ` Holger Hellmuth 0 siblings, 2 replies; 21+ messages in thread From: Junio C Hamano @ 2012-03-28 23:01 UTC (permalink / raw) To: Holger Hellmuth; +Cc: Matthieu Moy, kusmabite, Git Mailing List Holger Hellmuth <hellmuth@ira.uka.de> writes: > Am 28.03.2012 22:50, schrieb Junio C Hamano: >> I think Matthieu is not thinking about the "resolve conflicted merge (or >> rebase, am) and make a single commit" use case, for which your "pick one >> of the sides" makes sense. His is more about "I like some change in that >> unrelated commit---while I have no intention to replay that change as a >> whole, I want to use "cherry-pick --no-commit" and pick only the bits out >> of the change that are useful for what I am doing" use case. >> >> In such a context, after resolving conflicts in the working tree, "add -p" >> would be a good tool to pick hunks in the diff between the HEAD and the >> working tree. > > Ok. Something like this (which is not really that different from Eriks > example, so I might still be missing something) ? After re-reading what I wrote, I find that I misspoke. There is a crucial step missing. After running "cherry-pick --no-commit", you would eyeball the result, and typically edit the file. The conflict may not be in the part of the file you are interested in picking, in which case you may even leave that part as-is. And then, you would pick what you want to apply to the index during per-hunk interactive patching session. In other words,... > git init . > echo "foo" > bar.txt > git add bar.txt > git commit -m. > git checkout -b new > echo "bar" >> bar.txt > git commit -am. > git checkout master > git reset --hard > echo "baz" >> bar.txt > git commit -am. > git cherry-pick --no-commit new Here, there *will* be "edit bar.txt" before "add -p". Which makes... > git add -p bar.txt > > So he would be interested in keeping his previous working tree version > (identical to HEAD commit, otherwise cherry-pick fails)... ...this part of your analysys (and your conclusion that he can take '<') invalid. Now I am not Matthieu, so he may have a different use case in mind when he said "I want to take the version from my working tree", but the sequence "cherry-pick --no-commit ; edit ; add ; commit" is a natural way to pick only a part relevant to your current work from unrelated commit, and I would understand why "Taking the version from my working tree" can be useful in such a scenario. In short, these two are totally different workflows and call for two different semantics. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 23:01 ` Junio C Hamano @ 2012-03-28 23:05 ` Junio C Hamano 2012-03-29 1:32 ` Holger Hellmuth 1 sibling, 0 replies; 21+ messages in thread From: Junio C Hamano @ 2012-03-28 23:05 UTC (permalink / raw) To: Junio C Hamano; +Cc: Holger Hellmuth, Matthieu Moy, kusmabite, Git Mailing List Junio C Hamano <gitster@pobox.com> writes: > There is a crucial step missing. After running "cherry-pick --no-commit", > you would eyeball the result, and typically edit the file. The conflict > may not be in the part of the file you are interested in picking, in which > case you may even leave that part as-is. And then, you would pick what > you want to apply to the index during per-hunk interactive patching > session. Strictly speaking, you do not even have to edit the file. If the conflict does not overlap the part of the change you are interested in, a hypothetical version of "add -p" that is oblivious to merge conflicts (i.e. running "reset $path" before starting "add -p") could help you apply the changes the picked commit makes relative to its parents to your current state. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 23:01 ` Junio C Hamano 2012-03-28 23:05 ` Junio C Hamano @ 2012-03-29 1:32 ` Holger Hellmuth 1 sibling, 0 replies; 21+ messages in thread From: Holger Hellmuth @ 2012-03-29 1:32 UTC (permalink / raw) To: Junio C Hamano; +Cc: Matthieu Moy, kusmabite, Git Mailing List Am 29.03.2012 01:01, schrieb Junio C Hamano: > There is a crucial step missing. After running "cherry-pick --no-commit", > you would eyeball the result, and typically edit the file. The conflict > may not be in the part of the file you are interested in picking, in which > case you may even leave that part as-is. And then, you would pick what > you want to apply to the index during per-hunk interactive patching > session. But that changes nothing. To make it clear: We have a file with chunks A, B and C. Only B is conflicting, but the user wants to add A or an edited A´ . And maybe also a new edit D. When he calls "git add -p", he gets presented with B. By picking the "ours" option (aka "<") he gets the version in HEAD, resolving the conflict and thereby allowing the add. Next he will be presented with A (or A´) where he can type in "y" and C where he can type in "n". Result: chunk A is added, C not, and B doesn't change from HEAD. Note he had the option to use ">" instead if it was B he wanted to cherry-pick. The same happens if he further edited somewhere else to produce chunk D. Again, after resolving the conflict of B, he is presented with A,B and D and can add these chunks with "y" or not with "n". The only case I haven't talked about now is if he edits B, but that is the trivial case because he would normally remove the conflict markers as well and git add -p would work conflict-free after the edit. > In other words,... > >> git init . >> echo "foo"> bar.txt >> git add bar.txt >> git commit -m. >> git checkout -b new >> echo "bar">> bar.txt >> git commit -am. >> git checkout master >> git reset --hard >> echo "baz">> bar.txt >> git commit -am. >> git cherry-pick --no-commit new > > Here, there *will* be "edit bar.txt" before "add -p". ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 20:10 ` Holger Hellmuth 2012-03-28 20:50 ` Junio C Hamano @ 2012-03-29 7:26 ` Matthieu Moy 2012-03-29 21:08 ` Junio C Hamano 1 sibling, 1 reply; 21+ messages in thread From: Matthieu Moy @ 2012-03-29 7:26 UTC (permalink / raw) To: Holger Hellmuth; +Cc: Junio C Hamano, kusmabite, Git Mailing List Holger Hellmuth <hellmuth@ira.uka.de> writes: >> And you miss the most usefull (to me at least): "choose the version in >> the worktree". >> > > But the conflicted chunks are of the form "<<<< our ... |||||||||| > theirs >>>>>>" in your work tree. So there are two cases: > > a) You have removed the markers thereby removing the conflict -> this > means the chunk will not be offered to you as a conflicting chunk If you have removed the markers, then the file is still marked as conflicted in the index, and the user may still want to see the combined diff. My use-case is actually quite simple: I see "git add -p" both as a way to make partial commits, and as a way to manually validate what I'm about to commit. I review the diff, validate them with "y", and if I see something wrong, I quit "git add -p", fix the issue, and next "git add -p" won't show it again. This flow could work also with conflicts: $ git add -p # see an unresolved diff for file foo.txt n # see a resolved diff for file bar.txt y <-- the "missing" possibility for me $ edit foo.txt $ git add -p # see resolution for file foo.txt y $ git commit The "'git reset $path' before 'add -p'" workaround is not really handy there: it requires typing the path, while my workflow with "git add -p" does not, and it wouldn't show the combined diff, which is usually the best tool to see if a merge has been resolved properly. The current behavior is not that bad for me: I see the combined diff in the output, I just have one extra "git add $path" to type. Being able to just say "y" instead would be handy, but not fundamentally different. -- Matthieu Moy http://www-verimag.imag.fr/~moy/ ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-29 7:26 ` Matthieu Moy @ 2012-03-29 21:08 ` Junio C Hamano 2012-03-30 8:11 ` Matthieu Moy 0 siblings, 1 reply; 21+ messages in thread From: Junio C Hamano @ 2012-03-29 21:08 UTC (permalink / raw) To: Matthieu Moy; +Cc: Holger Hellmuth, kusmabite, Git Mailing List Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes: > The "'git reset $path' before 'add -p'" workaround is not really handy > there: it requires typing the path,... That is exactly why "add -i" was written without first giving "add -p" shorthand, which spoiled you and at the same time robbed you the other parts of "add -i". ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-29 21:08 ` Junio C Hamano @ 2012-03-30 8:11 ` Matthieu Moy 0 siblings, 0 replies; 21+ messages in thread From: Matthieu Moy @ 2012-03-30 8:11 UTC (permalink / raw) To: Junio C Hamano; +Cc: Holger Hellmuth, kusmabite, Git Mailing List Junio C Hamano <gitster@pobox.com> writes: > Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> writes: > >> The "'git reset $path' before 'add -p'" workaround is not really handy >> there: it requires typing the path,... > > That is exactly why "add -i" was written without first giving "add -p" > shorthand, which spoiled you and at the same time robbed you the other > parts of "add -i". Quite frankly, I never liked the interface of "git add -i". It saves very little compared to typing "git status" and then doing stuff directly from the shell. "git add -p" on the other hand just requires "y" and "n" most of the time, and that really does what I want. In the case of conflicts, I don't think "git add -i" solves the problem "view the diff and mark it as resolved" smoothly. -- Matthieu Moy http://www-verimag.imag.fr/~moy/ ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 15:10 ` Junio C Hamano 2012-03-28 15:21 ` Matthieu Moy @ 2012-03-28 15:33 ` Erik Faye-Lund 2012-03-28 17:17 ` Junio C Hamano 1 sibling, 1 reply; 21+ messages in thread From: Erik Faye-Lund @ 2012-03-28 15:33 UTC (permalink / raw) To: Junio C Hamano; +Cc: Git Mailing List On Wed, Mar 28, 2012 at 5:10 PM, Junio C Hamano <gitster@pobox.com> wrote: > Erik Faye-Lund <kusmabite@gmail.com> writes: > >> I'm running git version 1.7.9.msysgit.0.390.g01fca.dirty, and I've >> noticed a puzzling behavior with "git add -p" on a conflicted file: it >> seems to simply spew the diff and exit the process. > > Yeah, when I wrote the 'p'atch mode in "add--interactive", I wasn't > interested at all in letting it be used on a conflicted path, so that is > not a designed-in behaviour but merely whatever it happens to do. OK, that's pretty much what I suspected ;) > So at > least it should not allow the user to pick a path that has conflicts in > it. So, the options are: 1) Keep the current behavior 2) Abort with an error immediately if one of the picked paths are in a conflicted state 3) Abort with an error when first encounter a path that is in a conflicted state 4) Warn and skip any paths that are in a conflicted state 5) Implement "git add -p" for conflicted files (if we can agree on a behavior) 1) and 3) makes little sense to me. 5) only makes sense if we can agree on what should have happened. > What the behaviour for people who *do* want to use the patch mode for > conflicted paths should be is a separate matter. As I said, I am not > interested in it, so I wouldn't be the best person to design it. > > I mildly suspect nobody would come up with a sane behaviour, but what > would I know... Well, I can explain what I expected to happen: I had stashed away some of my "hacking"-code to rebase a branch to the current master. I was going to stage parts of the stashed changes as a commit on top. However after rebasing, "git stash pop" lead to a conflict. So I manually resolved the conflicts, but only wanted to stage some of the hunks to be committed. Now, what is obvious in hindsight, is that I should simply have done "git reset" after resolving the conflicts manually. When I do "git add -p", I add hunks to the index. But for a conflicted file, the index isn't in a well-defined state (or, the contents of the file is in a not-yet-defined state). However, as it happened it made me confused (and a little bit frustrated). I suspect this could confuse other users as well. Perhaps we should implement 1) or 3) and come up with a helpful error/warning message? I don't have a very strong opinion on which one is better, but I suspect 3) is easier. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: git add -p and unresolved conflicts 2012-03-28 15:33 ` Erik Faye-Lund @ 2012-03-28 17:17 ` Junio C Hamano 0 siblings, 0 replies; 21+ messages in thread From: Junio C Hamano @ 2012-03-28 17:17 UTC (permalink / raw) To: kusmabite; +Cc: Git Mailing List Erik Faye-Lund <kusmabite@gmail.com> writes: > So, the options are: > 1) Keep the current behavior > 2) Abort with an error immediately if one of the picked paths are in > a conflicted state > 3) Abort with an error when first encounter a path that is in a > conflicted state > 4) Warn and skip any paths that are in a conflicted state > 5) Implement "git add -p" for conflicted files (if we can agree on a behavior) > > 1) and 3) makes little sense to me. I do not think 1, 2, or 3 makes any sense to me if you are proposing to change anything. Why did you even bother to list them? Given that you wrote "(if we can...)" for #5, in the short term, #4 is the only sensible thing to do, I would think. ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2012-03-30 8:11 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-03-28 9:51 git add -p and unresolved conflicts Erik Faye-Lund 2012-03-28 15:10 ` Junio C Hamano 2012-03-28 15:21 ` Matthieu Moy 2012-03-28 19:14 ` Holger Hellmuth 2012-03-28 19:19 ` Junio C Hamano 2012-03-28 19:52 ` Holger Hellmuth 2012-03-29 6:08 ` Jeff King 2012-03-29 10:19 ` Holger Hellmuth 2012-03-28 19:38 ` Matthieu Moy 2012-03-28 19:54 ` Junio C Hamano 2012-03-28 20:10 ` Holger Hellmuth 2012-03-28 20:50 ` Junio C Hamano 2012-03-28 22:50 ` Holger Hellmuth 2012-03-28 23:01 ` Junio C Hamano 2012-03-28 23:05 ` Junio C Hamano 2012-03-29 1:32 ` Holger Hellmuth 2012-03-29 7:26 ` Matthieu Moy 2012-03-29 21:08 ` Junio C Hamano 2012-03-30 8:11 ` Matthieu Moy 2012-03-28 15:33 ` Erik Faye-Lund 2012-03-28 17:17 ` Junio C Hamano
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).