본문 바로가기
개발/Git

[개발/Git] Git 실습하기 ( Add부터 Merge까지)

by 코코의 주인 2022. 9. 27.

ㅎ 이번 글에서는 git으로 관리되는 프로젝트에서 파일을 add 하고 브랜치를 생성해서 merge까지 하는 과정을 실습해 보도록 하겠다. 실제로 프로젝트를 관리하는 흐름대로 실습을 할 거니까 잘 따라오렴.

1. 수정 내역 확인 : git status

git status 명령어를 사용해서 프로젝트 폴더의 상태를 확인한 결과 현재 이 프로젝트에는 수정 내역이 없는 것을 확인했다.

 

파일 수정

vi 에디터를 사용해서 이 폴더에 있는 README.md 파일의 내용을 [왼쪽]에서 [오른쪽]과 같은 상태로 수정했다.

 파일을 수정한 뒤 git status 명령어를 다시 실행하면 README.md 파일이 수정되었기 때문에 add(추가)를 하거나 restore(복구)를 하라는 메시지를 확인할 수 있다.

2. 수정된 파일 업데이트 : git add & git commit

 이 수정사항을 반영하고 싶다면 git add <파일명> 명령어를 사용해서 수정된 파일을 staging area에 추가한다. 

 만약 수정사항이 마음에 들지 않아서 수정 전 상태로 돌리고 싶다면 git restore <파일명> 을 사용하면 파일을 복구할 수 있다.

 

(이 아래로는 스크린샷 누락이 있어서 추후에 재촬영한 부분이 있기 때문에 commits 횟수가 다르게 표시되어 있는 사진이 있을 수 있음.)

 staging area에 파일을 업데이트 하고 git status 명령어로 git의 상태를 알아보면 staging area에 파일이 추가되었고 아직 commit되지 않은 상태임을 볼 수 있다.

 git commit 명령어를 사용하면 staging area에 있는 파일을 local repository 에 추가할 수 있다. git commit 명령어를 입력하면 아래와 같은 창이 나타난다.

 Commit을 수행할 때는 이 파일의 수정 사항을 담은 메시지를 작성해야 한다. 이것도 몇 가지 규칙이 있기 때문에 이를 따르는 것이 좋다.

  • 제목은 축약하여 쓰기(40자 이내로 구나 절의 형태)
  • 내용은 문장형으로 작성하여 추가설명
  • 제목과 내용은 한 줄 띄워서 분리
  • prefix 반드시 달기
    • feat : 기능 개발 관련
    • fix : 오류 개선 혹은 버그 패치
    • docs : 문서화 작업
    • test : test 관련
    • conf : 환경설정 관련
    • refactor : 알고리즘 개선
    • build : 빌드 관련
    • BREAKING CHANGE : 매우 중요한 변경 사항(ex. 버전 업데이트 시 전 버전의 지원 종료를 통보)
    • ci : Continuous Integration 관련
    • ETC.

 commit 을 수행한 후 git의 상태를 확인해보면 commit이 성공적으로 수행되었고 git push를 통해 로컬에서 변경된 사항을 원격 저장소로 업데이트 하라는 안내가 나온다.

 

3. 원격 저장소에 변경사항 적용하기 : git push

 git push <원격 저장소> <브랜치> 명령어를 통해서 로컬에서 변경된 내용을 원격 저장소에 업데이트 하면 기초적인 Git 사용법은 모두 숙달했다.

 

4. 브랜치 사용하기 : git branch

브랜치는 분기점을 생성해서 독립적으로 코드를 변경할 수 있도록 도와주는 모델이다.

브랜치를 사용할 때는 몇 가지 유의할 점이 있다.

  • 브랜치의 이름은 이름만으로 무슨 역할을 하는지 알 수 있도록 직관적으로 만든다.
  • 작업이 끝난 브랜치는 바로 삭제한다.
  • 사용할 브랜치를 모두 push할 필요는 없다.생명 주기가 짧은 경우 main에 병합하고 올리는 것이 더 좋다.

 git branch <브랜치명> 을 사용해서  원하는 이름의 브랜치를 만들 수 있다.

 현재 로컬 repo에 존재하는 브랜치의 목록을 보고 싶다면 git branch 명령어를 사용하면 브랜치의 목록을 확인할 수 있다.

 

5. 브랜치 이동하기 : git switch

 브랜치 간 이동을 위해선 git branch <브랜치명> 명령어를 사용해서 이동할 수 있다. git branch 명령어에 -c 옵션을 주면 브랜치의 생성과 이동을 동시에 할 수 있다.

 브랜치가 생성될 때는  마지막 commit이 진행됐던 상태로 만들어지기 때문에 새로 만들어진 test-branchREADME.md 파일과 mainREADME.md 파일의 내용이 같은 것을 확인할 수 있다.



 test-branchREADME.md의 내용을 약간 수정하고(마지막 줄) add와  commit까지 진행했다.

 다시 main으로 이동해서 README.md의 내용을 보면 test-branch에서 수정한 내용이 반영되지 않았다. 작업 내용은 서로 독립적으로 각 브랜치에 존재하기 때문에 코드를 수정할 일이 생겼을 때 main 브랜치에서 바로 코드를 수정하는 위험한 행동 보다는 브랜치를 따로 만들어서 거기서 작업하는 것이 좋다.

6. 브랜치 병합하기 : git merge

 git merge 명령어를 사용해서 두 브랜치를 병합할 수 있다.

 만약 test-branch에서 작업한 내용을 main에 반영하고 싶다면

  1. main 브랜치로 이동한다
  2. git merge <병합하고자 하는 브랜치> 명령어 실행
  3. git branch -D <브랜치명> 명령어로 병합된 브랜치 삭제

의 과정을 수행하면 된다.

7. merge 충돌 해결하기

 mainREADME.md파일의 마지막 줄 상태는 "Good morning"이다.

conflict1 브랜치와 conflict2 브랜치를 만들어서 마지막 줄의 내용을 각각 "Good Afternoon"과 "Good Night"으로 변경했다. 한 프로젝트에서 각자 다른 사람이 동일한 파트를 다르게 작업한 것을 가정한 것이다.

conflict1 conflict2main에 병합하려고 했더니 conflict2main에 병합하려고 할 때 오류가 발생했다. 동일한 위치에 각기 다른내용이 있기 때문에 시스템이 어떤 것을 선택해서 병합을 해야할지 결정할 수 없기 때문이다.

 

이 경우 직접 충돌이 일어난 파일로 가서 충돌하는 부분을 수정해 주어야 한다. 나는 README.md 파일로 가서 conflict2의 변경 내역인 "Good Night"을 선택해서 병합하기로 했다.

 충돌하는 부분의 수정된 파일을 add하고 commit하면 [왼쪽]과 같은 commit 메시지 창이 나온다. 이미 merge conflict를 해결한 것에 대한 내용이 자동으로 입력되어 있기 때문에 따로 수정할 필요 없이 저장하면 된다.

 위 과정을 마치면 수정 내용이 적용된 README.md 파일이 main에 성공적으로 병합된 것을 확인할 수 있다. 이제 사용하지 않을 브랜치를 삭제하면 모든 과정이 끝난다.


총평

 이 글 하나로 최대한 git에 대해 이해할 수 있도록 실제로 git을 사용해서 개발하는 과정을 따라 글을 작성해봤다. 정성들여 작성한 만큼 많은 사람들에게 도움이 됐으면 좋겠다.

댓글