0. 깃충돌
- 개인 프로젝트만 해봤던 나... 테오 스프린트 팀 협업을 하면서 충돌이 오지게 났었다.
- 충돌때메 엉엉 울게되었다.. 제대로 정리해보자!
마스터(main) 브랜치에서 let a = 'apple'로 처음에 지정하고 커밋. 브랜치를 freshman 이라고 새로 파서 let a = 'orange'로 바꾸고 커밋. |
마스터 브랜치가 git merge freshman 으로 freashman 브랜치랑 합치려고 하니까 아래처럼 충돌이 났다.
충돌이 되고 나서 화면에 아래처럼 떴다.
HEAD 는 지금 내가 현재 있는 브랜치
======을 기준으로 HEAD는 현재 내가 있는 브랜치 밑에는 충돌된 브랜치
Accept Current Change : 지금 현재 내가 있는 브랜치 코드를 따라가
Accept Incoming Change : 새로 들어오는 코드를 따라가
Accept Both Changes : 둘다 받아들여
freshman 브랜치를 받아들이자 하면서 Accept Incoming Change 를 누르면 화면이 하나로 깔끔하게 바뀐다.
마스터에 freshman 브랜치에 있던 내용이 덮여씌워진다.
그런데 여기서 끝이 아니라 커밋해줘야 최종 머지가 된다.
git commit -m 'mergge conflict resove'
커밋을 해주자.
그리고 master 브랜치에서 senior 브랜치를 새로 만들고 (git checkout -b senior)
let a = 'pineapple'로 바꾸고 커밋
그리고master는 'let a = 'kiwi'라고 내용을 바꾼다.
senior 브랜치와 master 브랜치 합치자
또 충돌이 났다.
지금 있는 내 브랜치(마스터) HEAD 에는 kiwi 라고 하고
들어오고있는 senior 브랜치는 pineapple이라고 한다.
Accept Current Change 를 해서 내가 현재있는 브랜치 내용을 유지하겠다.
해결한 후에 커밋을 해야 반영이 된다.
git add .
git commit -m 'merge with senior'
그리고 다시 시니어 브랜치로 가보자
그런데 시니어 브랜치는 아직도 let a = 'pineapple'로 되어있다.
이렇게 되면 안된다. 마스터에 있는 내용을 덮어씌워야한다. 업데이트 해줘야한다.
마스터에 변화가 있을 때마다 pull(덮어씌우기) 해줘야한다.
git pull origin master 를 해본다.
그러면 에러가 생길것이다.
마스터로부터 들고올 코드가 없다는것. 왜냐하면 마스터에 푸쉬를 안했기 때문이다.
마스터브랜치에서 원격 저장소로 푸쉬를 안했기 때문에 마스터에서 들고올 코드가 없다는 것이다.
그래서 마스터 브랜치로 이동해서 git push origin master 를 해준다.
이제 senior 브랜치로 가면 git pull origin master를 하면 kiwi로 바뀌게 된다.
1. 충돌 피하는 방법
- 가급적 다른 파일에서 작업한다. 같은 파일안에서 2사람 이상 작업하지 말자
- 스타일 파일은 공유하니까 에러가 난다. 스타일도 모두가 쓰지말고 각 파일별로 만드는게 좋다.
- 커밋을 최대한 자주해준다. 머지했는데 에러가 났다. 너무 많은 내용이 바뀌어져있다. 과거로 돌아갈때 저장한게 없어서 다 없어진다.
- merge 도 자주하자.
- pull 도 자주자주 하자. 한번에 많은 양을 받아들이면 어려우니까
참고자료
https://www.youtube.com/watch?v=PGQIJE4tHAs