Ours czy theirs – który to jest mój kod? Problem podczas rozwiązywania konfliktów

Opublikowane przez Tomasz Prasołek w dniu

Podczas rozwiązywania konfliktu musimy zdecydować, który kod w tym wypadku jest prawidłowy: nasz, czy kogoś innego. Pokażę jak to wygląda w różnych aplikacjach.

Rozwiązywanie konfliktu. Który to jest mój kod?

W tym wpisie wyjaśnię czyj kod podczas rozwiązywania konfliktu oznaczają pojęcia:

  • ours, theirs – występują jeśli konflikt rozwiązujemy z poziomu konsoli.
  • Local, Remote – w aplikacji kdiff3, której ja używam. Opisywałem ją w poście: Git – szybsze rozwiązywanie konfliktów z narzędziem kdiff3
  • Source, Target – Visual Studio, IDE od Microsoftu. Korzystam z niego zarówno w domu i w pracy. Uwzględniam również tą aplikację, bo w pracy mi się zdarza, że wspólnie z kolegą rozwiązuje jakiś konflikt na jego komputerze.

Zrobiłem sobie testowe repozytorium. Zrobiłem w nim branch feature, na którym to wszystko testowałem.

Liczyłem na to, że podczas testów, który kod jest mój, czy to local czy remote wyjdą różne niespodziewane rzeczy w stylu: jeśli robisz merge to Twój kod to local, ale jeśli robisz rebase to Twój to kod to remote.

Nic z tych rzeczy, wszystko okazuje się łatwe, proste i można zawrzeć w takiej tabelce 🙂

Założenia:

  1. Wykonuję operację merge brancha feature do master.
  2. Wykonuję operację rebase brancha master do feature.

Tabela:

ours / Local / Target theirs / Remote / Source
git, kdiff3, Visual Studiomasterfeature

Przykład 1: Merge

git checkout master
git merge feature

Nasz kod (czyli ten z brancha feature) to będzie: theirs / remote / source – w zależności w której aplikacji rozwiązujemy konflikt.

Przykład 2: Rebase

git checkout feature
git rebase master

Nasz kod (czyli ten z brancha feature) to będzie: theirs / remote / source – w zależności w której aplikacji rozwiązujemy konflikt.

Jak wybrać odpowiedni kod w konsoli

Jeśli przy rozwiązywaniu konfliktu mamy taką sytuację, że chcemy wziąć cały kod z konkretnej strony to można zrobić to tak:

git checkout --theirs .

Następnie dodajemy zmiany do stage’a i kontynuujemy rozwiązywanie dalszych konfliktów.

Kropka na końcu oznacza, aby wziąć nasz kod w każdym pliku. Zamiast kropki może być ścieżka do pliku np.

git checkout --theirs rebase-test.txt

Analogicznie jeśli chcemy wziąć nie nasz kod to wpisujemy:

git checkout -- ours .

Podsumowanie

I to tyle 🙂 Myślałem, że ten wpis będzie trochę dłuższy.

Wychodzi na to, że za rzadko rozwiązuje konflikty i przez to do tej pory mi się czasami myliło 🙂 Wystarczy zapamiętać to raz i zawsze będzie to niezmienne. Szczerze przyznam, że spodziewałem się, że będzie to trochę bardziej zakręcone 🙂

Photo by Richard Lee on Unsplash


1 Komentarz

dotnetomaniak.pl · 1 czerwca 2019 o 12 h 10 min

Ours czy theirs – który to jest mój kod? Problem podczas rozwiązywania konfliktów – Poznaj Gita

Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *