▼ Why ?
프로젝트 협업을 하기 위해선 Git에 대한 지식이 필수적으로 요구되기 때문에, 이번 두 개의 프로젝트를 진행하면서 Git에 대한 공부를 시작했고 여러 개념들 중 Git branch에 대해 먼저 이해해야 할 것 같아서 정리하게 되었다.
▼ Branch
- branch란?
- 독립적으로 어떤 작업을 진행하기 위한 개념
- 각 요구사항에 따라 만들어지는 각각의 branch는 다른 branch의 영향을 받지 않아,
여러 작업을 동시에 진행 가능 - 필요한 기능을 개발할 때 새 branch를 생성하고, 코드를 작성하며 commit을 남긴다
➠ 개발이 완료되면 그때 main branch에 merge를 하여 안전한 개발이 가능한 것이다
(수정 / 삭제도 간단)
- 독립적으로 어떤 작업을 진행하기 위한 개념
- branch가 왜 필요한가?
- main branch에서만 작업한다면 기능이 완성되기 전까지 main branch의 소스코드는 불완전한 상태이다
➠ main branch는 출시되고 배포된 코드를 위한 branch이기 때문에 적절하지 않다 - 협업을 하게 된다면 더 큰 문제 발생 !
➠ 어떤 개발자는 버그를 수정하기도, 새로운 기능을 만들기도 하는데,
이 과정에서 작업 중인 파일을 누군가 건드릴 수도 있는 문제가 있다
➠ 여러 기능을 개발하면서 남겨진 commit history가 main branch에 알아보기 힘들 정도로 섞이게 될 수도 있다
➠ 만약, 중간에 수정해야 할 상황이 발생하게 된다면 원하는 시점으로 롤백하기도 어려워진다 ! - branch 기능을 사용하면 여러 기능을 여러 사람이 병렬적으로 개발할 수 있게 된다 !
- main branch에서만 작업한다면 기능이 완성되기 전까지 main branch의 소스코드는 불완전한 상태이다
▼ Branch 사용법
- git branch
: branch의 리스트 및 현재 branch 확인 가능

- git log
: branch 정보 확인- git log --online ➠ commit hash, branch, commit message만 한 줄로 나타내어 간결하게 확인
- git log --branches ➠ 현재 존재하는 각 branch별 최신 commit 확인
- git log --graph ➠ 현재 branch들의 상태를 막대(' | ')로 나타낸다, 좀 더 직관적으로 확인 가능
( ' --branches ' 옵션과 함께 사용해야 한다 ) - 'Q' ➠ log 창에서 나가고 싶을 때
- git checkout <브랜치명> / git switch <브랜치명>
: 현재 branch를 브랜치명에 해당하는 branch로 전환
➠ 해당 branch를 사용하겠다고 명시적으로 지정하는 것
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git checkout Uykm
- git status
: 수정된 파일 목록을 확인할 경우에 사용, 수정된 파일이 있을 경우 그 파일들의 이름이 표시된다

- git merge <대상 브랜치명>
: branch 병합 ( ' Fast-forward 병합 ' 또는 ' 빨리 감기 병합 ' )

PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git checkout main
➠ master('main') branch에 'HEAD'가 위치하게 만들어야 한다 (현재 branch로 전환)

PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git merge issue1
➠ main branch가 issue1의 가장 최신 commit을 가리키게 하는 원리이다
- uykm - main 브랜치 병합
➜ git checkout main
➜ git merge uykm- 메시지를 작성하려면, 편집기에서 i 키를 눌러 삽입 모드로 전환합니다.
- 커밋 메시지를 입력합니다. '#'으로 시작하는 줄은 무시되므로, 실제 커밋 메시지는 '#'이 아닌 줄에 작성.
- 메시지를 작성한 후 Esc 키를 눌러 삽입 모드를 종료.
- :wq를 입력하고 Enter 키를 눌러 메시지를 저장하고 편집기를 종료.
➜ git push origin main
( 원래는 PR을 보내고 push 해야 한다. )
- git merge --no--ff
: Fast-forward 병합이 불가능할 때 쓰는 완전 병합 방식
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git merge --no--ff issue1
- git branch <브랜치명>
: 브랜치명으로 branch 생성
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git branch Uykm
- git branch -d <브랜치명>
: 브랜치명에 해당하는 branch를 삭제
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git branch -d Uykm
- git branch -m <브랜치명> <새로운브랜치명>
: 브랜치명 변경
▼ 원격 저장소 (GitHub, "Remote Repository") ⮂ 로컬 저장소 (Local branch)
- git push
➠ Git 로컬 브랜치를 원격 저장소로 push
- git add .
➠ 올릴 준비 - git commit -m "commit message"
➠ 메시지 표시 - git push <remote> <branch>
➠ Git은 기본적으로 origin을 원격저장소(<remote>)로,
현재 작업하고 있는 branch를 push할 브랜치로(<branch>) 지정
- git add .
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git push origin main
➠ 원격 저장소에서 내용이 변경되어 있다면 ' git pull ' 을 먼저 해주고 push 해주기
- git push --force
➠ 원격 저장소로 강제로 push 하는 방법
- git fetch
➠ Tracking을 요청하는 명령어
➠ 쉽게 말하면, Remote repository의 commit을 가져온다

⬇ ⬇

⬇ ⬇
( 협업하는 사람이 Github에 third / fourth commit을 push 했고,
Local branch에는 내가 new commit을 생성했다 )

➠ 이때 new commit을 push 해도 문제가 생기지 않도록
Remote repository를 tracking 해주는 것이 ' git fetch ' 이다
( tracking : Local branch의 origin/master를 Remote repository의 master 브랜치에 맞춰 업데이트 )
- git fetch <alias> <branch>
- 특정 branch를 tracking 할 수있게 한다
➠ alias에 해당하는 Remote repository에 맞춰 alias/을 접두어로 갖는 <branch>들이 모두 업데이트
( ex. git fetch origin master ➠ master branch만 tracking
- 특정 branch를 tracking 할 수있게 한다
- git pull
➠ git fetch + git merge
➠ Remote repository의 commit을 가져온 다음(git fetch),
현재의 Working Directory에 병합(merge)하는 명령어

⬇ ⬇

➠ git fetch와 git merge 작업을 한 번에 수행하기 때문에, 충돌이 일어날 수 있다 !

➠ 이 충돌을 " conflict " 라고 하고, 이 conflict를 해결해야 pull이 가능하다
▼ Why ?
프로젝트 협업을 하기 위해선 Git에 대한 지식이 필수적으로 요구되기 때문에, 이번 두 개의 프로젝트를 진행하면서 Git에 대한 공부를 시작했고 여러 개념들 중 Git branch에 대해 먼저 이해해야 할 것 같아서 정리하게 되었다.
▼ Branch
- branch란?
- 독립적으로 어떤 작업을 진행하기 위한 개념
- 각 요구사항에 따라 만들어지는 각각의 branch는 다른 branch의 영향을 받지 않아,
여러 작업을 동시에 진행 가능 - 필요한 기능을 개발할 때 새 branch를 생성하고, 코드를 작성하며 commit을 남긴다
➠ 개발이 완료되면 그때 main branch에 merge를 하여 안전한 개발이 가능한 것이다
(수정 / 삭제도 간단)
- 독립적으로 어떤 작업을 진행하기 위한 개념
- branch가 왜 필요한가?
- main branch에서만 작업한다면 기능이 완성되기 전까지 main branch의 소스코드는 불완전한 상태이다
➠ main branch는 출시되고 배포된 코드를 위한 branch이기 때문에 적절하지 않다 - 협업을 하게 된다면 더 큰 문제 발생 !
➠ 어떤 개발자는 버그를 수정하기도, 새로운 기능을 만들기도 하는데,
이 과정에서 작업 중인 파일을 누군가 건드릴 수도 있는 문제가 있다
➠ 여러 기능을 개발하면서 남겨진 commit history가 main branch에 알아보기 힘들 정도로 섞이게 될 수도 있다
➠ 만약, 중간에 수정해야 할 상황이 발생하게 된다면 원하는 시점으로 롤백하기도 어려워진다 ! - branch 기능을 사용하면 여러 기능을 여러 사람이 병렬적으로 개발할 수 있게 된다 !
- main branch에서만 작업한다면 기능이 완성되기 전까지 main branch의 소스코드는 불완전한 상태이다
▼ Branch 사용법
- git branch
: branch의 리스트 및 현재 branch 확인 가능

- git log
: branch 정보 확인- git log --online ➠ commit hash, branch, commit message만 한 줄로 나타내어 간결하게 확인
- git log --branches ➠ 현재 존재하는 각 branch별 최신 commit 확인
- git log --graph ➠ 현재 branch들의 상태를 막대(' | ')로 나타낸다, 좀 더 직관적으로 확인 가능
( ' --branches ' 옵션과 함께 사용해야 한다 ) - 'Q' ➠ log 창에서 나가고 싶을 때
- git checkout <브랜치명> / git switch <브랜치명>
: 현재 branch를 브랜치명에 해당하는 branch로 전환
➠ 해당 branch를 사용하겠다고 명시적으로 지정하는 것
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git checkout Uykm
- git status
: 수정된 파일 목록을 확인할 경우에 사용, 수정된 파일이 있을 경우 그 파일들의 이름이 표시된다

- git merge <대상 브랜치명>
: branch 병합 ( ' Fast-forward 병합 ' 또는 ' 빨리 감기 병합 ' )

PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git checkout main
➠ master('main') branch에 'HEAD'가 위치하게 만들어야 한다 (현재 branch로 전환)

PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git merge issue1
➠ main branch가 issue1의 가장 최신 commit을 가리키게 하는 원리이다
- uykm - main 브랜치 병합
➜ git checkout main
➜ git merge uykm- 메시지를 작성하려면, 편집기에서 i 키를 눌러 삽입 모드로 전환합니다.
- 커밋 메시지를 입력합니다. '#'으로 시작하는 줄은 무시되므로, 실제 커밋 메시지는 '#'이 아닌 줄에 작성.
- 메시지를 작성한 후 Esc 키를 눌러 삽입 모드를 종료.
- :wq를 입력하고 Enter 키를 눌러 메시지를 저장하고 편집기를 종료.
➜ git push origin main
( 원래는 PR을 보내고 push 해야 한다. )
- git merge --no--ff
: Fast-forward 병합이 불가능할 때 쓰는 완전 병합 방식
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git merge --no--ff issue1
- git branch <브랜치명>
: 브랜치명으로 branch 생성
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git branch Uykm
- git branch -d <브랜치명>
: 브랜치명에 해당하는 branch를 삭제
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git branch -d Uykm
- git branch -m <브랜치명> <새로운브랜치명>
: 브랜치명 변경
▼ 원격 저장소 (GitHub, "Remote Repository") ⮂ 로컬 저장소 (Local branch)
- git push
➠ Git 로컬 브랜치를 원격 저장소로 push
- git add .
➠ 올릴 준비 - git commit -m "commit message"
➠ 메시지 표시 - git push <remote> <branch>
➠ Git은 기본적으로 origin을 원격저장소(<remote>)로,
현재 작업하고 있는 branch를 push할 브랜치로(<branch>) 지정
- git add .
PS C:\Users\who\Desktop\Tools\Donggram\donggram-server-main\donggram-server> git push origin main
➠ 원격 저장소에서 내용이 변경되어 있다면 ' git pull ' 을 먼저 해주고 push 해주기
- git push --force
➠ 원격 저장소로 강제로 push 하는 방법
- git fetch
➠ Tracking을 요청하는 명령어
➠ 쉽게 말하면, Remote repository의 commit을 가져온다

⬇ ⬇

⬇ ⬇
( 협업하는 사람이 Github에 third / fourth commit을 push 했고,
Local branch에는 내가 new commit을 생성했다 )

➠ 이때 new commit을 push 해도 문제가 생기지 않도록
Remote repository를 tracking 해주는 것이 ' git fetch ' 이다
( tracking : Local branch의 origin/master를 Remote repository의 master 브랜치에 맞춰 업데이트 )
- git fetch <alias> <branch>
- 특정 branch를 tracking 할 수있게 한다
➠ alias에 해당하는 Remote repository에 맞춰 alias/을 접두어로 갖는 <branch>들이 모두 업데이트
( ex. git fetch origin master ➠ master branch만 tracking
- 특정 branch를 tracking 할 수있게 한다
- git pull
➠ git fetch + git merge
➠ Remote repository의 commit을 가져온 다음(git fetch),
현재의 Working Directory에 병합(merge)하는 명령어

⬇ ⬇

➠ git fetch와 git merge 작업을 한 번에 수행하기 때문에, 충돌이 일어날 수 있다 !

➠ 이 충돌을 " conflict " 라고 하고, 이 conflict를 해결해야 pull이 가능하다