본문 바로가기
Study/etc.

[Git] 깃의 기본에 대해 공부해보자. (깃 기본 명령어 branch merge delete)

by 박히밍 2023. 2. 11.
반응형

깃 깃허브

[Git] 깃의 기본에 대해 공부해보자. (깃 기본 명령어 branch merge delete)

두려워서 피하기만 했던 깃 공부를 해보려 합니다.





 

 

 

🧐 깃 기본 명령어 정리(git basic)

  • git init
    • git 저장소 초기화 방법

 

  • git add index.html(파일명)
    • 선택한 파일을 스테이징 영역에 올린다.

 

  • git add index.html style.css .. 이런식으로 파일을 여러개 추가 가능
  • git add . 이렇게 하면 모든 파일을 스테이징 영역에 올리겠다는 뜻
  • git commit -m ‘커밋할 메시지’
    • 커밋 메시지와 함께 깃 레파지토리로 파일을 올린다.

 

  • git restore --staged index.html (파일명)
    • 스테이징 된 파일을 취소하고 싶을 때 사용하는 명령어

 

  • git status
    • 내가 스테이징한 파일 리스트를 볼 때 사용

 

  • git log --all --oneline
    • 커밋 내역들을 조회할 수 있다.

 

  • git diff
    • 현재의 파일이 최근 commit과 어떤 부분이 달라졌는지 알려준다.

 

  • git diff commitID (커밋ID)
    • 최근 commit 내용과 비교하는 것이 아니라 해당 commitID를 지니고 있는 커밋 내용과 현재의 파일을 비교할 때 사용

 

  • git diff commitID1 commitID2
    • 과거의 특정 commit 간의 차이점 비교를 할 수 있다.

 

  • git difftool
    • 텍스트 형태의 커밋 내용을 Vim 창으로 직관적으로 볼 수 있음
    • git difftool commitID difftool로 특정 커밋 내용을 확인하는 방법
    • :qa 를 입력 후 엔터를 치면 Vim 창이 종료된다.

difftool






깃 익스텐션 (VScode)

git Grapfh









🧐 깃 브랜치(git branch)

git branch란?
git branch란 쉽게 말하면, 소스코드의 복사본과도 같은 것.
원래 있던 소스코드를 안전하게 보관한 뒤 브랜치를 생성하여 새로운 기능을 추가하거나 테스트 할 때 사용한 뒤
안정적으로 기능이 추가되었을 때 원본 소스와 합치기 위한 전단계

 

  • git branch BranchName (브랜치명)
    • 브랜치를 생성하는 명령어

 

  • git switch BranchName (브랜치명)
    • 생성한 브랜치로 전환하는 명령어






깃 브랜치 병합(merge)

 

1. 새로 생성한 브랜치를 main 브랜치와 합치는 기본 방법

  • 기준이 되는 브랜치(or main)으로 switch 한다.
  • git merge BranchName (브랜치명) 한다
만약 같은 파일을 수정하고 둘 다 커밋했을 경우 merge시 충돌 안내를 한다. 이와 같은 경우 merge conflict가 발생한다고 말하는데, 에디터로 해당 파일을 열어보면 충돌사항이 적혀있다. 그래서 확인 후 모두 수락할 지 / 일부만 수락할 지 등 어떤 코드를 병합하고 남길 지 결정한 뒤 git add와 git commit을 해주면 된다.

 

 

 

2. 다양한 merge의 종류

 

  • 3way-merge
    • 각 브랜치에 신규 커밋이 있는 상태로 머지할 경우 각 코드를 합쳐서 새로운 커밋으로 생성하는 것

3way-merge



  • Fast-forward-merge
    • 기준 브랜치에 새로운 커밋이 없고, 새롭게 생성한 브랜치에 커밋 사항이 있을 경우, 서로 충돌하는 상황이 없기 때문에 자동으로 새롭게 생성한 브랜치가 main 브랜치가 된다.
    • 싫으면 git merge --no-ff BranchName(브랜치명) 해서 강제로 3-way merge 할 수 있다.

Fast-forward-merge





  • Rebase-merge ⭐️
    • 3way-merge를 할 경우 다양한 커밋 로그들이 보이기 때문에 복잡해보일 수 있기 때문에 간단하고 짧은 브랜치들은 히스토리 관리를 위하여 사용한다.
    • 단점: 기존의 코드들을 이어붙이는 개념이기 때문에 comflict가 발생할 확률이 높다.
1. 새로운 브랜치로 switch
2. git rebase 기준이 되는 브랜치명(or main)
3. git switch 기준이 되는 브랜치명(or main)
4. git merge 새로운브랜치

Rebase-merge



  • 2-4. Squash-merge ⭐️
    • 대충 모든 브랜치들을 3way-merge로 할 경우 깃 히스토리 관리가 복잡해질 수 있다는 것을 앞에서도 말했지만 이런 히스토리 관리의 복잡도를 낮출 수 있는 또 다른 방법이 Squash-merge 이다.
    • 3-way merge처럼 선으로 이어주지 않고 새 브랜치에 있던 코드 변경사항들이 main 브랜치로 텔레포트한다고 보면 된다.
1. git switch main
2. git merge —squash 새로운브랜치
3. git commit -m '커밋메세지'

Squash-merge








🧐 브랜치 삭제

3-way, fast-forward 아무렇게나 merge 해도 브랜치를 merge 하고 나면 브랜치가 자동으로 삭제되진 않기 때문에 merge를 다 하고 남은 브랜치들을 삭제 해주어야 한다.

  • git branch -d BranchName
    • 병합이 완료된 브랜치를 삭제할 때
  • git branch -D BranchName
    • 병합하지 않은 브랜치를 삭제할 때






참고자료

코딩애플 강의
https://codingapple.com/course/git-and-github/

 

(무료) 매우쉽게 알려주는 git & github - 코딩애플 온라인 강좌

  누구나 마음 한켠엔 나만의 웹서비스를 만들고 싶어합니다. 프론트엔드는 어찌저찌 하겠는데 서버 만드는게 어렵고 귀찮다고요? 그렇다면 Firebase를 쓰십시오.   구글이 웹서버를 대신 만들어

codingapple.com




  •  
반응형