Git konflikty u jedynego developera.

Odpowiedz Nowy wątek
2019-03-08 15:05
0

Hej, mam dość spory problem z gitem. Mianowicie, projekt posiada tylko jednego developera który wypuszcza po kolei kolejne funkcjonalności:

git add file
git commit -m "Some description"
git push origin HEAD:kategory/branch
git pull --rebase=false

Problem wygląda tak:

Załóżmy że wypchnął w ten sposób trzy funkcjonalności na gita.
Nie pokazuje by którakolwiek miała konflikt z masterem na gitlabie.
Następnie, gdy próbuje się zrobić merge do developa, to pierwsza idzie w porządku, kolejne mają już konflikty. Czy ktoś wie może dlaczego tak się może dziać, albo potrzebuje jakieś 'odczyty z gita' żeby móc to ustalić? Byłbym bardzo wdzięczny za jakieś rady, bo ciągłe naprawianie konfliktów które jeszcze w dodatku czasem występują przy próbie naprawienia jedną metodą, czasem inną itd. to już po prostu irytuje, ja rozumiem konflikty między różnymi developerami, ale jeden sam ze sobą, to już masakra.


Linux Mint
Arduino / Python 3.5.2

Pozostało 580 znaków

2019-03-08 15:24
0

Ale to są pushe na 3 różne branche? I potem co do czego chcesz mergować?


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
Już kolega niżej rozwiał moje wątpliwości nim zdążyłem odpisać. Ale dzięki za zainteresowanie :) - Guaz 2019-03-08 17:03

Pozostało 580 znaków

2019-03-08 15:32

Bardzo prosto to można zrobić nawet lokalnie:

echo foo >> file
echo bar >> file
git add file
git commit -am commit-1

# Tworzymy gałąź ze zmianą
git checkout -b branch
sed -i '' 's/bar/baz/' file
git commit -am commit-2

# Na masterze zmieniamy tą samą linijkę
git checkout master
sed -i '' 's/bar/quux/' file
git commit -am commit-3

# Robimy merge i jest konflikt
git merge branch

Czyli inaczej mówiąc, nawet jak jesteś sam i w 2 różnych branczach zmienisz tę samą linijkę, to będziesz miał konflikt.

edytowany 3x, ostatnio: hauleth, 2019-03-08 15:36
Dzięki, czyli wiem o co chodzi. Dzięki wielkie :) - Guaz 2019-03-08 17:03

Pozostało 580 znaków

2019-03-09 10:30
3

Konflikty są czasami nie do uniknięcia. Załóżmy że jest takie wywołanie funkcji:

foo(1, 2, "test");

na jednej branczy trzeba dodać kolejny parametr:

foo(1, 2, "test", false);

a na innej zmienić jeden z istniejących:

foo(1, 4, "test");

Wynikowy merge prawdopodobnie (choć nie jest to pewne) powinien wyglądać tak:

foo(1, 4, "test", false);

ale tego już Git sam nie zrobi, a nawet nie powinien. Nie wnika w składnię danego języka, a tym bardziej w logikę programu. Takim przypadkom powinien przyjrzeć się programista.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0