-
Notifications
You must be signed in to change notification settings - Fork 1
Conflicten oplossen
Conflics happens when two branches have changed the same part of the same file, and then those branches are merged together. For example, if you make a change on a particular line in a file, and your colleague working in a repository makes a change on the exact same line, a merge conflict occurs. Git has trouble understanding which change should be used, so it asks you to help out.
Bron: help.github.com
Een conflict ziet er altijd zo uit:
the number of planets are
<<<<<<< HEAD
nine
=======
eight
>>>>>>> devHein
-
<<<<<<<
hieronder staat de code aan op de master branch (waarom erHEAD
staat i.p.v.master
weet ik niet) -
=======
onderschijd verschillende code versies -
>>>>>>>
hierboven staat de code op uw eigen branch (in deze situatie is ditdevHein
)
Eerst dit uitvoeren.
Indien je een conflict tegenkomt, ziet dit er zo uit in je client. Herkenbaar aan de
Open dat bestand in uw gebruikelijke IDE en neem zelf de beslissing om de verkeerde code weg te nemen. In het bovenstaande voorbeeld mag alle doorstreepte tekst dus weg:
the number of planets are<<<<<<< HEAD nine =======eight>>>>>>> devHein
Een meer toepasselijke voorbeeldje zie je hieronder:
public class Rekenmachine {
<<<<<<< HEAD
public int berekenSom(int a, int b) {
=======
public double berekenSom(double a, double b)
{
>>>>>>> devHein
return a + b;
}
<<<<<<< HEAD
public int berekenVerschil(int a, int b) {
=======
public double berekenVerschil(double a, double b)
{
>>>>>>> devHein
return a - b;
}
}
Aan u om te beslissen wat weg mag en wat moet blijven. Het is aangeraden om even te overleggen met uw team genoten.
Indien er geen
Komt niet zoveel voor en niets anders kan.
Indien er nog altijd conflicten zijn en het bestand is niet te vinden, doe je het vinkje uit dat voor het bestand staat zoals op onderstaande afbeelding en commit je zonder die bestanden.
Deze bestanden komen na uw commit terug onder de veranderingen (changes) te staan maar zal waarschijnlijk geen problemen meer geven.
Allerlaatste optie die je nog kan doen en als je echt niets anders kan.
Indien er een pipo veranderingen gedaan hebt die je niet wilt, kan je altijd kiezen voor discart changes. Hiervoor ga je als volgt te werk in de client:
- Rechtermuisknop op file
- Discart changes
Let er wel me op dat je niet te veel weg doet zodat uw eigen gemaakte en goede code niet weg is.
Indien je dit tegenkomt, moet je eerst uw branch updaten met de master en krijg je direct conflicten. Deze kan je oplossen op uw eigen branch zoals hierboven uitgelegd.
Q: Hoe los je dat dan op? als bv op lijn 27 van de build.gradle
door mij een library abc
werd toegevoegd en door iemand anders library xyz
en ze moeten er beide in?
A: De eerste persoon die de commit van de nieuwe library doet, zal dit kunnen doen zonder conflict. De tweede persoon krijgt dan wel een conflict als hij zijn branch wilt updaten met alles wat op de master branch staat.
Een voorbeeld:
Dit werd gecommit door persoon A:
// ...
dependencies {
//RETROFIT + RXJAVA
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.google.code.gson:gson:2.6.2'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.jakewharton:butterknife:8.4.0' // nieuwe library door persoon A
testCompile 'junit:junit:4.12'
}
Dit wil persoon B committen:
// ...
dependencies {
//RETROFIT + RXJAVA
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.google.code.gson:gson:2.6.2'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.github.bumptech.glide:glide:3.7.0' // nieuwe library door persoon B op zelfde lijn als persoon A
testCompile 'junit:junit:4.12'
}
Persoon B krijgt het conflict en ziet er zo uit:
// ...
dependencies {
//RETROFIT + RXJAVA
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.google.code.gson:gson:2.6.2'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.android.support:recyclerview-v7:23.4.0'
<<<<<<< HEAD
compile 'com.jakewharton:butterknife:8.4.0'
=======
compile 'com.github.bumptech.glide:glide:3.7.0'
>>>>>>> zijnBranch
testCompile 'junit:junit:4.12'
}
Beide library zijn nodig voor het uitvoeren van de applicatie. De oplossing is zeer simpel. Verwijder gewoon de lijnen met <<<<<<< HEAD
, =======
en >>>>>>> zijnBranch
en laat de rest staan incl. de enters. Opslaan en committen.
Ontwikkeld door:
- Niels Bril
- Michiel Vermeersch
- Jasper De Sutter
- Hein Pauwelyn
- Michiel Zyde