( dlaszlo | 2025. 01. 08., sze – 09:50 )

Igen, bzt, Te biztos jobban összemerge-ölsz mindent kézzel, mint a git, amit erre találtak ki. :))

Hagyjuk már ezt a hazugozást, nem ugyanúgy látjuk a dolgokat. Tizensok éve használom a git-et, nem fogod ezt most megmagyarázni, hogy a git sz*r. Köszi.

Szerk: a teljesség kedvéért a példád, mielőtt azt mondod, hogy nem próbáltam ki (de már sokszor kipróbáltam):

Default beállítások:

git config --global init.defaultBranch main
git config --global pull.rebase true

Hozz létre három repository-t:

mkdir a b c
cd a
git init
cd ..

cd b
git init
cd ..

cd c
git init --bare
cd ..

Add hozzá a az "a"-hoz, "b"-hez a "c"-t mint remote repo-t:

cd a
git remote add origin ../c
cd ..

cd b
git remote add origin ../c
cd ..

Commitoljunk az "a"-ba, és pusholjuk "fel":

cd a
echo "Ez egy readme fájl." > readme.txt
git add readme.txt
git commit -m "Add readme.txt"
git push --set-upstream origin main
cd ..

Leszedjük a b-ben:

cd b
git pull origin main
cd ..

Commitoljunk megint az "a"-ba, és pusholjuk:

cd a
echo "Ez egy readme fájl. #2" >> readme.txt
git add .
git commit -m "readme.txt 2"
git push
cd ..

Majd a "b"-be is:

cd b
echo "teszt" >> readme.txt
git add .
git commit -m "teszt b"
git push --set-upstream origin main

Itt jön a hibaüzenet, amin megakadtunk (ami teljesen jogos, és normális hogy jön):

git ! [rejected]        main -> main (fetch first)
error: failed to push some refs to '../c'
hint: Updates were rejected because the remote contains work that you do not

És itt pedig a feloldása::

git pull origin main

Ezt kapod rá válaszul:

From ../c
 * branch            main       -> FETCH_HEAD
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
error: could not apply c0151ab... teszt b
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".

Ezen a ponton kell merge-ölnöd, és vedd észre, hogy kiírta a további teendőket:

vi readme.txt
git add readme.txt
git rebase --continue

és voilá, tudsz push-olni:

git push --set-upstream origin main

 

Jogos, hogy merge-ölni kellett?

Igen, mindenképp. Honnan tudta volna kitalálni a git, hogy Te azzal a három sorral mit akarsz, melyik a valid?

Ezt fájl kopizgatással, meg diff-fel nehezebb lett volna összehozni? Ezt a kis példát talán nem, de egy nagy projektben mindenképpen.