패스트캠퍼스 데브캠프

김민태의 데브캠프 2 - Git/Github 정리

vitamin3000 2024. 9. 30. 21:47

9월 30일 현재 진행되고 있는 교육은 Git의 사용법이다.

Git에 관련된 명령어와 이것들을 활용하여 어떻게 실무에서 사용되는지에 대해 배웠다.

관련된 내용의 코드와 직접 실행하면서 결과를 확인해보고자 한다.

 

Sourcetree나 githubDesktop 등 프로그램이 제공되고 있지만, 

이 프로그램이 어떻게 동작하는지에 대한 원리 또한 이해해보고자 CLC 환겸에서 진행한다.

 

1.  git clone 하는 방법

 

옆에 아이콘 또는 드로그 앤 복사로 HTTPS의 주소 값을 얻는다.

 

그다음 vscode 터미널에서 git clone 명령어로 원격 저장소를 복제한다.

 

2. git init : 프로젝트 디렉토리를  git이 추적하는 파일 시스템으로 만든다.

git init은 크게 1. git directory(레포지토리)

                       2. staging area (index) -> git status 실행시 나타나는 파일, 변화를 기록

                                                                커밋시 해당 내용은 디렉토리에 추가되고 비워진다.

                       3. working directory

3. git add . : 이 명령을 통해 추적해야할 파일임을 알리고 README.txt 파일이 생성되고 git이 추적한다.

4. git commit : 변경 작업이 끝났다는 의미로 git의 기본 단위이다. 

git commit -m "메시지 내용"으로 보통 사용하는데,  옵션 추가로 -a도 함께 사용한다. 이것은 3번과 같은 명령이다.

5. git status : 현재 브랜치의 상태를 보여주는 명령어

현재 브랜치를 생성 또는 이동하지 않았기 때문에 main이다.

 

6. git checkout -b 브랜치명

6번의 명령어로 새로운 브랜치를 생성과 이동, 확인해보았다.

보통 브랜치의 명은 코드 리뷰, 테스트 등을 거쳐 검증된 내용이 업로드 되는 main, 출시하기전 release, 개발하는 develop 등으로 이름을 보고 유추 할 수 있도록 작성한다.

 

그렇다면 브랜치는 왜 필요한가?에 대해 생각해보길바란다.

 

 

 지금부터는 내가 알지 못했던 새로운 내용이다.

7. 6에서 브랜치를 만들고 이를 main 또는 다른 브랜치로 합치는 과정을 merge라고 한다.

develop 브랜치에서 값을 수정하고 이를 main에 merge하는 과정을 수행해보고자 한다.


현재 develop 브랜치에 위치하고 있음을 확인 할 수 있다.

파일의 내용을 일부 수정하고 commit 명령어로 변경사항을 저장한다.

 

 

9471171의 Hash 값을 확인 할 수 있다.

이제 merge 명령어를 실행하려고 한다.

우선 merge는 develop 브랜치의 수정사항을 main에 저장하기 위해서는 main으로 이동해야 한다.

git checkout main으로 이동 후 git stsatus로 확인한다.

 

git merge develop의 명령어로 main과 develop 브랜치를 merge했다. 

 

 

결과 화면은 다음과 같다.

merge를 진행했음에도 git log에는 merge한 내용이 출력되지 않는다 

왜 이럴까?

 

우선 merge할 때 출력된 Fast-forward에 대해 알아야한다.

main 브랜치에서 파일을 수정하지 않았고, develop 브랜치에서만 파일을 수정하였다.

그렇다면 git의 입장에서는 main 브랜치에서 수정한 것과 다름이 없다고 인식한다.

따라서 merge log를 남길 필요가 없는 것이다.

이것을 Fast-forward라 한다.

 


git log에서 확인해본 그래프도 일자로 되어있다.

 

다음은 main 브랜치에서 파일을 수정하고 커밋, develop 브랜치에서 파일을 수정하고 커밋 후 merge했다.

 

위 사진과 같이 merge한 log가 남는다.

여러명, 여러개의 브랜치가 merge할 경우 각 브랜치에 대해 log가 남아 기록 추적에 어려움을 겪을 수 있다.

그렇다면 기록을 남기고 싶지 않을 때는 어떻게 해야할까?

 

8. rebase 명령어를 사용한다.

rebase는 merge와 다르게 develop으로 이동한다.

그 이유는 main의 마지막 커밋 뒤에 develop의 첫번째 커밋이 향하게하는 것이기 떄문이다.

커밋은 시작과 끝이 연결되어 있다.

 

rebase 커밋 예시

오른쪽 사진을 참고하기 바란다.

git rebase main 명령어 후에 log를 확인해보면

 

 

이전과 달리 log가 남지않고 merge가 된것을 확인할 수 있다.

 

merge와 rebase는 각자 장.단점을 가지는데 아래의 표를 참고하여 사용하자

특징 Merge Rebase
사용 용도 동시 작업시 유용 개인작업 또는 간단한 기능 추가
충돌 해결 병합 시 한번에 해결 여러 커밋에 대해 순차 해결
log log가 많이 남아 복잡 일직선의 깔끔
추천 상황 팀 프로젝트에서 동시 작업시 개인 브랜치 작업 후 메인 브랜치 병합할 때