ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • git init부터 merge, rebase, pull request까지 (git으로 협업하기)
    Git 2024. 8. 26. 09:32

    Git 기초

     

    로컬에서(내 데스크탑에서) git으로 버전 관리를 하고 싶을 때

     

    → git 이라는 폴더가 생기면서 버전 관리를 시작하는 걸 뜻한다. git init은 한 프로젝트 당 딱 한번만 해야한다.

    git init

     

     

    일단 코드를 새로 작성할 때마다 밥먹듯이 해야하는 것 add, commit 둘은 세트다.

    add: 나 이제 저장할거야, commit: 진짜 저장 (git은 commit을 기준으로 버전 관리를 한다)

    git add .
    git commit -m "commit message"

     

    커밋 메시지는, 만약 내가 회원가입 기능을 구현했다면, "feature:signup" 또는 "회원가입" 이런식으로 써주면 된다.

     

     

    만약, 내가 회원가입, 로그인, 로그아웃 기능 세가지를 구현했다면? 🤔 

     

    📌 그래서, 커밋메시지를 길게 쓰고싶다면?

    git add .
    git commit

     

    git commit 엔터하고, i 를 누르면 이렇게 여러줄 입력할 수 있는 창이 생긴다. 

    엔터 해보면 명령어가 실행되는게 아니라 커밋메시지를 더 쓸 수 있도록 다음 줄로 이동된다.

     

     

    메시지를 끝내고 싶으면 esc 누르고 

    :wq

     

    위와 같이 콜론 : wq  하면 빠져나올 수 있다. write quit 그만 쓴다는 뜻. 진짜 직관적이다.ㅎㅎ

     

     

    만약, github에 있는 레포지토리에도 남겨두고 싶다면, 아래 명령어로 레포지토리를 가져오고

    git remote add origin https://~ #원격 저장소 url

     

    clone으로 가져와도 되고 https url을 직접 복사해도 된다.

     

     

    최초 푸시일 때는 -u origin을 줘서 원격저장소와 연결해주면 된다.

    git push -u origin master

     

    📌 -u 또는 --set-upstreamorigin 원격 저장소의 master 브랜치를 로컬 master 브랜치와 연결해주고, 이후 git pushgit pull 명령어를 사용할 때 원격 브랜치를 자동으로 추적하도록 설정해준다.

     

     

    나는 위 과정을 해서, 깃 내 브랜치에 올리기 위해 그냥 git push 만 해주면 된다. 내가 작성한 코드를 깃에 올리는 거다.

     

     

    특정 브랜치의 작업을 pull 해야 할 때

    git branch -v

    현재 로컬 브랜치 목록과 함께 각 브랜치의 최신 커밋 정보를 확인할 수 있다.

    git pull origin <branch_name>

     

    원격저장소에서 <branch_name> pull 해와서 현재 로컬 브랜치에 병합한다.

     

     

    📌 참고

     

    선 pull 후 push

     

    pull과 push에도 우선 순위가 있다. 만약, A라는 항목이 있다고 할 때, 원격에서 A가 a로 커밋되었고, 로컬에서는 b로 커밋되었다면, 원격에서의 a를 먼저 pull 해야 한다.

     

    즉, 내가 push 할 게 있는데 누군가 프로젝트를 먼저 커밋한 게 있다면, 먼저 커밋된 내용을 pull 하고 그 이후에 내가 커밋한 내용을 push 해줘야 한다.

     

    로컬이 GitHub보다 뒤쳐져 있으면 pull을 하고 그 다음 push를 해줘야 한다. 이 때 그냥 git pull을 하면 오류가 발생한다. 이미 로컬에서도 커밋한 내용이 있기 때문에 '병합'없이 불러올 수 없기 때문이다. 그렇기 때문에 pull을 먼저 해야한다.

     


     

    Branch

     

    브랜치 == 특정 커밋을 가리키는 포인터 ()

    브랜치는 새로운 기능을 구현할때마다 여러개 만들어도 된다. 머지하면 됨.

     

    브랜치 목록 및 내가 지금 어떤 브랜치에 있는지 확인

    git branch

     

     

    브랜치 생성

    git branch <branch_name>

     

     

    <branch_name> 이라는 브랜치를 생성하고 즉시 그 브랜치로 이동

    git switch -c <branch_name>

     

     

    <branch_name>로 이동 (즉, 현재 작업중인 브랜치를 <branch_name>으로 변경하고자 할 때)

    git switch <branch_name>
    git checkout <branch_name>

     


    예: 이러면 dev 브랜치로 전환된다.

    git switch dev

     


    Branch merge

    각 branch에서 작업한 후 코드를 합치기 위해서는 일반적으로 merge 명령어를 사용한다.
    병합을 진행할 때, 만약 서로 다른 commit에서 동일한 파일을 수정한 경우 충돌이 발생하곤 한다.(매우 자연스러운 일)
    이 경우에는 그냥 직접 수정해주면 된다. 한 번 해보면 어려울 거 없음.

     

    내가 원하는 코드로 혹은 팀장님이 승인한 최근 이력을 확인한 후, 직접 코드를 수정한 후 → git add .→ git commit 하면 끝이다.

     

     

    브랜치 병합 

    git merge <branch_name>

     

    현재 브랜치에 <branch_name>이라는 브랜치의 변경사항을 병합하는 거다. 높은 확률로 충돌이 발생한다. 직접 수정해서 충돌을 해결한 하면 된다.

     

     

    예를 들어, 아래처럼 자주 쓰게 된다. 

    git checkout dev
    git merge feature/signup

     

    dev 브랜치에 feature/signup 브랜치의 변경사항을 병합한다는 뜻이다.

     

     

     

    브랜치 재배치 

    git rebase <branch_name>

     

    현재 브랜치의 변경 사항을 다른 브랜치의 최신 커밋 위로 재배치하는 거다.

    ★ rebase는 커밋 이력 및 타임라인을 깔끔하게 유지할 수 있도록 해준다.

     

     

    예를 들어, 아래 명령어는 feature/signup 브랜치의 변경 사항을 main 브랜치의 최신 커밋 위로 재배치하겠다는 뜻

    git checkout feature/signup
    git rebase main

     

     

    merge를 하며 발생한 충돌을 해결했다면 그 다음은? 당연히 add, commit을 해줘야한다.

     

     

    다른 사람의 branch로 switch 하고 싶을 때

     

    remote와 local은 별개의 환경이다. remote에 브랜치가 있다고해서 local에 있지 않기 때문에 먼저 remote의 branch를 local로 가져온 다음 switch를 하는 것이 필요하다.

     

    아래 명령어들을 차례로 입력해주면 된다.

    git fetch
    git checkout -t <branch_name>
    git switch <branch_name>

     

     

    다른 branch를 pull 해도 될까?
    • 기능적으로 가능하지만, 해도 되나요? 에 대한 대답은 아니오🙅‍♂️ 
    • 현재 branch와 동일한 branch에 push & pull을 해야한다.
    • 다른 branch 기능이 현재 branch 필요하다면 merge 를 사용하자.

     


     

    협업의 시작

     

    Manager Crew
    Github 에서 Repository 생성 Github 가입한 이메일로 오는 초대 메일 수락
    Local 에서 Repository 생성 git clone URL_git
    git init (작업)
    git remote add origin URL_git git add, commit
    README.md 생성 git push origin master
    git add, commit  
    Manage Access > Invite a Collaborator  

     

     

    이때 중요한 게 있다. 바로 pull request

    같이 프로젝트를 하는 사람들끼리의 소통인 동시에 중간 보고 정도로 생각하면 된다. 

     

     

    예시

     

     

    git branch & merge (using PR) 
    • branch는 부담없이 생성하면 된다
    • 개발이 끝났으면 PR을 올린다
    • Conflict가 발생했다면 해결하고 add / commit / push
      • 해결할 branch에서 다른 branch를 Merge
      • add / commit / push
    • PR에서 리뷰가 끝났으면 Merge
    • git pull로 로컬 반영 (필요시)

     

     

    이 외에도 git에는 무지 많은 기능들이 있다고 한다. 이번 팀 프로젝트 끝나고 공부해봐야곘다👀

     



    참고

     

    .gitignore 은 이 사이트를 이용하면 편함 > https://www.toptal.com/developers/gitignore/

    이렇게 나한테 필요한걸 입력해서 Creates누른 후 복붙 해오면 된다.

     

     

     

    깃, 게임으로 공부하기

     

    https://learngitbranching.js.org/?locale=ko

     

    Learn Git Branching

    An interactive Git visualization tool to educate and challenge!

    learngitbranching.js.org

     

    해보니까 꽤 재밌고 생각보다 쉽지 않았다.😂

Designed by Tistory.