Ours czy theirs – który to jest mój kod? Problem podczas rozwiązywania konfliktów
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:
- Wykonuję operację merge brancha feature do master.
- Wykonuję operację rebase brancha master do feature.
Tabela:
ours / Local / Target | theirs / Remote / Source | |
git, kdiff3, Visual Studio | master | feature |
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