Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [egit-dev] Inconsistent handling of commit with more than one parent

Yes, I agree that we need some enhancements when managing merge commits.
I would take native git as input what to achieve. I would expect to see the same
diffs as "git diff <mergeCommit>"

>> I've noticed that in many cases egit does not handles correctly commits
>> with more than one parent (merge commits). Actually the most of the code is
>> in place. I think that with some small changes it is possible to achieve
>> much better handling of merge commits. At least in my practice I have to
>> review (view the diff of) merge commits and in some case revert them and I
>> think maybe there are other that would found the better handling of merge
>> commits useful.
>>
>> * When you open file and select Compare with -> Previous revision if the
>> commit is merge commit (so there are more than one previous revisions). Also
>> the annotations (blame) work fine - when the line is introduced in merge
>> commit - it shows the difference with each parent. In history view when you
>> select the merge commit the file is displayed as changed file but no diff is
>> shown. Maybe we can display the combined diff or at least a list with the
>> diffs to the parents. If 'Compare Mode' is selected and you double click on
>> the changed file you'll receive an error message that says this is merge
>> commit so you can't open the compare view. Maybe instead the choose commit
>> dialog should be shown (the same as for compare with previous revision).
>> Also if you open the merge commit in the Commit Viewer and select the Diff
>> tab, an exception is thrown. Maybe instead the combined diff or list with
>> the diffs to the parents (as in the annotations/blame) should be shown
>> instead.
>>
>> * If you try to revert merge commit you get the following error:
>> Cannot revert commit 'b49e28179604cc14a9b5103442e6661e63e8570d' because it
>> has 2 parents, only commits with exactly one parent are supported
>> This exception Is thrown by the RevertCommand. But it's looks like that
>> this line that actually gets the parent
>>
>>     RevCommit srcParent = srcCommit.getParent(0);
>>
>> At least it looks like it's quite easy to modify the code so it gets the n
>> parent, where
rent (this is the way the c git client
>> works). The UI to choose the parent could be the same as the select commit
>> dialog for the Compare with -> Previous revision

yes!

>> * When you try to cherry-pick a merge commit nothing happens but the
>> following exception is thrown: org.eclipse.team.core.TeamException: Cannot
>> cherry-pick commit 'a25fd8622d4be0f610a28db8b23da5df4f263c29' because it has
>> 2 parents, only commits with exactly one parent are supported. But actually
>> jgit supports cherry-pick. You can set the parent number with
>> CherryPickCommand::setMainlineParentNumber. This exception is thrown only
>> when the parent number is not set. So maybe the message is bit misleading
>> and should be changed with something that says this is merge commit so you
>> must set a parent. And the egit should pass parent number that chosen by the
>> user. Perhaps with the select commit dialog.

The feature to be able to set the mainline is very new. It's not yet used by
EGit. Again we to present an extra UI for choosing the parent.

>> What do you guys think? Does any of that makes sense? If it does I could
>> spent some time to contribute changes. If this could help of course :)

In my eyes that makes a lot of sense


Back to the top