본문 바로가기
TechStudy/Git(hub)

[pre course] 프로젝트 협업 (충돌 해결, branch)

git clone  깃헙리포주소            <- repo 그대로 복붙

 

-> git log도 다 그대로 저장되어 있음

 

git remote -v  확인시 origin이 해당 주소로 출력

보통 push할 때 별도 절차 있음.  없애려면 personal access token을 만들어줘야함. 

ex) git remote set-url origin https://토큰값@origin의 host주소 및 path 복붙

 

별도 인증없이 push하게하는 절차

 

 

 

 

[프로젝트 방법]

 

한쪽이 push를 해버리면 다른 한쪽은 git repo의 옛날 기준으로 업데이트를 하기때문에 git에서 reject함

 

 

-> git fetch, git merge 실행하거나 git pull로 로컬 작업공간을 먼저 최신화를 하고 push를 진행해야한다.

 

ex)

git fetch origin&nbsp; 으로 내용을 업데이트를 해본다.

 

여기서 git log하면 내 로컬 영역만 나옴

그럼 다른 친구가 한걸 보려면?   -> git log origin/main  실행             

git diff origin/main   <- origin과 main이 다른 점 살펴보기

 

 

다른 친구가 작업한 네이버 로그인 기능이 보이는데 내 로컬엔 빠져있다.

git merge 사용

ex) git merge origin/main    -> conflict 발생!

왜? : 여러 사람이 동시에 같은 파일의 동일 부분을 수정해서 merge하려했기 때문!       -> 수동으로 해결해야함

                 (또는 서로 다른 브랜치로 작업하고나서 병합할때 생김)

충돌파일 = git status에서 unmerged로 표시  -> 충돌파일 열람해서 수정하자! ->  vi 이름.확장자    ex) vi first.txt

 

 

vi로 충돌파일 열람시 나오는 화면

>>>> 빠져야(?)하는 혹은 누락된 부분

<<<< 넣으려는거(HEAD)

 

충돌 부분은 <<<<<    >>>>> 이런 부분이므로 빨리 찾으려면

이렇게 /<<< 입력후 엔터를 치면
바로 나온다

해당 <<<< , >>>>부분에 커서를 대고 'dd' 두 번 눌러주면 한 줄 삭제가 된다.

 

수정방법은 vi로 바로 열람할 수도 있지만 vscode 등 여러 방법이 가능하다. 

ex) code first.text  <-여기서 찾기는 ctrl+F, 저장은 vscode에서 저장 후 종료

 

 

 

결론: git status로 unmerged 파일 찾기

         -> 충돌 확인(파일 열람해서 >>>>, <<<<, ====부분 찾기)   

         -> 수동으로 해당 부분 삭제 등으로 해결

         -> git add로 다시 스테이징

         -> 브랜치 병합 혹은 커밋 푸시

 

원격 브랜치 확인: git branch -r

 

이렇게 해결된 경우 나머지 다른 사람들은 다시 git pull origin으로 최신 상태를 반영해야한다.

 

실제 내용은 cat 파일.확장자  (Ex> cat first.txt)   <- 로 확인

 

 

 

 

실제로는

 

fetch , pull을 주기적으로 자주 해서 outdated를 최소화하고 작업 진행

보통 작업 진행은 충돌 방지를 위해 한 파일에 대해서보다는, 완전 서로 다른 부분에 대해 작업함.

충돌은 충돌하는 사람이 주로 해결해야 함.

 

 

 

 

 

branch: 특정 커밋 reference (작업내역)               <- 매우 가볍고 메모리 디스크 등에 부담 X   

 

활용 예)

1. 새 기능 개발시, 기능 개발용 branch에서 작업함으로써 다른 작업과 충돌 방지. 개발 완료시 branch 병합으로 깔끔함

2. 버그 수정용 branch로 하면 안전하게 효율적으로

3. 공개용 branch와 수정 작업용 branch 분리 (배포용은 안정성 , 신뢰성 높게)

4. 실험적 작업. (성공하면 개이득, 별로면 쉽게 버리기)

 

branch 열람하기

git branch              모든 로컬 브랜치 열람

git branch -a          github(원격) 브랜치까지 전체 열람

git branch -r           github 브랜치만 열람

git branch -v          브랜치 + 마지막 커밋 같이 열람

 

 

branch 생성하기

git branch 이름          <- 현재 위치한 브랜치에서 해당 이름의 브랜치 생성

main 안에 feature branch 생성. 그러나 현 위치는 main임

branch 이동하기

git checkout 이름           <- 해당 이름의 branch로 전환

주의사항: 브랜치간 내역이 다른 경우, 작은 임의 브랜치에서 작업하다가 기존 main으로 이동할 때, 로컬도 그대로 반영되어 기존 작업내용이 로컬에서도 사라져서 출력됨! 이동하는 것에 주의가 필요!

 

 

branch 합치기 (git merge)

ex) git checkout main 으로 main 기존 본체로 이동 후, git merge feature 입력시, main이 feature 흡수

 

가능한 git은 자동 병합하지만 충돌 발생 可   -> 이때는 위에서처럼, 수동으로 해결해야함

 

 

 

 

branch 삭제 (git branch -d 이름)       <- 가능한 함부로 하지 않도록 주의 (다른 팀원이 사용할 수도 있음)

 

 

 

git log --graph  <- merge 현황 확인 可

상단이 최신, main본체는 바교적 과거 커밋에 머물러 있다

 

 

 

 

 

checkout으로 main 이동 -> git merge feature -> git status 확인 결과

 

다시 git log --graph 확인하면

병합된 브랜치 확인 可

 

 

 

그 외는 브랜치 main에 합치고 push에서 원격에 업데이트하면 origin/main 원격 저장소도 제일 상단에 올라감

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형