I just want to comment on Buga's > It`s not about what you retain, but what you drop -- with "checkout > --ours/theirs", you effectively drop all the changes from one of the > branches, and I didn`t get the impression that`s what the user wanted, as he > never mentioned that.
statement. The "--ours/--theirs" options are not what we think they are! They say that we should fully merge everything in the normal way, and only if we have some minor local conflicts then Git should be biased to one side or the other in terms of performing a perfect, *apparently* conflict-free, merge. So what you get is everyhing on master, and everything on INT, with just a little bit of master's code missing where INT won coin toss (or the opposit for the other option). I too had that misunderstanding for a while. Philip ----- Original Message ----- From: Igor Djordjevic To: Git for human beings Sent: Thursday, July 13, 2017 8:58 PM Subject: Re: [git-users] Re: How to avoid merge conflicts while merging INT changes into Master On Thursday, July 13, 2017 at 6:13:44 AM UTC+2, Maheshwaran A N wrote: On Thursday, 13 July 2017 03:27:06 UTC+5:30, Igor Djordjevic wrote: On Wednesday, July 12, 2017 at 6:38:35 PM UTC+2, Yubin Ruan wrote: 2017-07-12 20:40 GMT+08:00 Maheshwaran A N <avpal...@gmail.com>: > On Tuesday, 11 July 2017 07:36:47 UTC+5:30, Anjaiah Yamagani wrote: >> >> Hi Team, >> >> I have very quick question - as I'm new to the git >> >> we have master branch. >> >> and checked out the INT branch from the master, worked on the INT for an >> month and all the developers pushed the code to INT , obviously INT branch >> ahead of comments then the master. >> >> Now while we try to push the code to the Master it shows conflicts, how to >> avoid this. >> >> at this stage I do not want to see the conflicts and work with the >> developers at this stage and resolve the merge conflicts. >> >> can you suggest are we doing any wrong thing here. >> >> Regards, >> Anjaiah > > I suppose you are trying to execute the below commands. > > git checkout master > git merge origin/INT (taking changes from remote branch) or git merge INT > (merge with local changes) > At this point you would have faced the conflicts. > In this case, if you want to retain the changes of INT, you can take the > changes from INT and apply it in master without opening the file and solving > the conflicts. Execute the below command > > git checkout --theirs <path/to/conflictfiles> wow, wasn't aware of that! Many thanks! /Yubin > git add <path/to/conflictfiles> > > Now, you can check in master branch for INT contents for conflicted file. I`m not sure how this helps resolving merge conflicts, as it doesn`t only retain all changes from INT, but effectively nukes all changes from master branch and just takes INT branch file state as-is -- so you`re not "applying it in master", but deleting master changes altogether. Doing this is dangerous, unless you really want to drop all master branch changes that happened since you branched your INT branch... Am I missing something? If this is exactly what you wanted to point out (dropping all master changes and taking INT file as-is), then let this be just an additional note of warning for those that might have missed it, as the original question seems concerned with solving something else - a real merge conflict situation, and this answer doesn`t seem to help there. Regards, Buga Requirement is to keep all the changes of INT. When you have multiple files to solve the conflicts and you very well know which branch to retain, then why not use ours/theirs? Whats dangerous here? User is very clear on what needs to be retained. It`s not about what you retain, but what you drop -- with "checkout --ours/theirs", you effectively drop all the changes from one of the branches, and I didn`t get the impression that`s what the user wanted, as he never mentioned that. He didn`t say he wants to retain INT changes in favor of master (loosing master branch changes after the merge), but was merely asking how to deal with merge conflicts which he doesn`t want to deal with _at the moment_ -- and I`m afraid there`s no easy answer to this, as Philip already pointed out. "Resolving" merge conflicts by using "checkout --theirs", he would drop all the changes from master, not for the moment, but _for good_, and he should be aware of that -- again, as it doesn`t seem that`s what he wanted, thus it`s dangerous to propose without explaining all the implications. Also, if you retain INT content, there is no much impact in master since INT is branched out from master as a base(Ideally, master is untouched). Therefore, INT is master+newcontents and i hope thats well tested in INT branch itself. But it`s already pointed out that master is not untouched, otherwise there would be no merge conflicts in the first place... Therefore, if you merge INT to master (both being changed), resolving conflicts using "checkout --theirs" (taking INT over master), then INT will be _INT only_ wherever there was a conflict with master -- meaning all the file changes on the master side will be dropped. It doesn`t matter that INT was branched off master, as they both progressed in the meantime... thus the merge conflicts. Let me use an example: (1) ---A---B---F---G---M (master) \ / C---D---E (INT) This shows the situation the user is having -- both branches progressed since branching in commit B, and now merging "INT" to "master" in M raises conflicts. To make it simple, lets say the project has only one file "main.c" which has been modified in each commit. In this situation, if you resolve conflicts by doing `git checkout --theirs main.c`, what you`ll end up in commit M is the exact same state of "main.c" file as it was in branch "INT" (commit E), where all the changes from the "master" branch (commits F and G) _would be lost_, not for the moment, but forever. Even worse, in a more real life scenario where project usually has more than one file, changes in files that raise no conflicts would be already merged from "INT" to "master" successfully, thus by taking only "INT" side for files that do have conflicts, you would end up in a possibly strange situation of having some files with changes from both "INT" and "master", and some files with changes from "INT" only (changes from "master" being lost). And, the original question is concerned with solving merge conflicts. I guess ours/theirs solves the purpose. In general case, where you really want to merge two branches by keeping changes made on both of them, no, it does not serve the purpose. Only if you want to pretend as one of the branches never existed, dropping all its changes -- which is not what the user mentioned, and which is not what you would _usually_ want to do with "master" branch, thus can be dangerous, or confusing at least, if you`re not completely aware of what you`re doing. 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. -- 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.