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.
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.
----- 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
>> month and all the developers pushed the code to INT , obviously INT
>> ahead of comments then the master.
>> Now while we try to push the code to the Master it shows conflicts,
>> 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.
> 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 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
> changes from INT and apply it in master without opening the file and
> the conflicts. Execute the below command
> git checkout --theirs <path/to/conflictfiles>
wow, wasn't aware of that! Many thanks!
> git add <path/to/conflictfiles>
> Now, you can check in master branch for INT contents for conflicted
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.
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
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
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
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)
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
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.
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
For more options, visit https://groups.google.com/d/optout.