개발에 입문하고 가장 먼저 배우는 것들 중 하나가 바로 Git일 텐데요. 오늘은 제가 개발을 거의 알지 못하던 SSAFY에서 처음 배웠지만, 개발자로 일하고 있는 지금도 자주, 또는 유용하게 쓰고 있는 Git 명령어들을 소개해보려고 합니다!
Git이란
많은 분들이 알고 계시겠지만 Git은 '버전 관리 시스템' 입니다. 개발을 하면서 여러 명이 하나의 코드 베이스에 수많은 변경 사항을 만들어야 하기 때문에, 이 과정에서 코드의 버전을 잘 기록하고 활용하기 위해 만들어진 도구인데요. 2005년, 리눅스 커널을 개발하던 개발자들이 만들었습니다. 이 Git을 사용하기 위한 명령어들을 터미널에 입력하면 내 코드의 상태를 자유자재로 저장하거나 되돌릴 수 있습니다.
git add, git commit -m, git push origin 'git branch 이름': 변경 사항을 원격 저장소에 업로드 할 때
# 현재 변경된 모든 파일들을 commit하기 위해 등록하는 과정입니다.
# 만약 특정 파일만 commit하고 싶다면 파일 이름을 '.' 자리에 적으면 됩니다.
git add .
# commit은 변경 사항을 기록하는 과정입니다. 이 때 변경 사항을 설명하는 메시지를 '-m' 이후에 적을 수 있습니다.
git commit -m "commit 메시지"
# push를 하면 원격 저장소(GitHub, GitLab 등)에 commit(들)을 업로드하는 것입니다.
git push
이 세 단계는 내 컴퓨터에서 만든 변경 사항들을 내 코드가 저장되어 있는 원격 저장소에 업로드 하는 과정입니다. 'git push'까지 마쳤을 때 비로소 코드가 GitHub이나 GitLab과 같은 원격 저장소에 업로드되게 됩니다. 그렇게 함께 일하는 팀원들이나, 나중의 내가 그 코드를 참고하거나 내려받을 수 있게 됩니다.
git switch -c '새 branch 이름': 특정 branch를 기준으로 새 branch를 만들 때
git switch -c "새 branch 이름"
Git을 사용하면서 가장 먼저 해야 할 일 중 하나죠? 바로 타겟 브랜치에서 뻗어 나올 내 브랜치를 만드는 건데요, 이 때 'create'을 뜻하는 '-c' 옵션을 사용해 브랜치를 간편하게 만들 수 있습니다. 만드는 순간 새 브랜치로 공간이 이동됩니다.
git rebase 'branch 이름': 내 branch의 시작을 타겟 branch의 최신 버전으로 바꾸고 싶을 때
Git rebase "branch 이름"
git merge는 자주 써도, git rebase는 처음 들어보시는 분들도 계실 텐데요. git rebase는 베이스가 되는 브랜치(대부분 main 브랜치일 것입니다.)를 내 브랜치에 합치는 명령어인데요. 자매품 'git merge'와 다른 점은 내 브랜치가 시작됐을 때보다 추가적인 업데이트가 있는 베이스 브랜치의 내용을 맨 마지막에 한 번에 덮어 쓰는 것이 아니라, 내 브랜치가 마치 최신의 베이스 브랜치에서 시작된 것처럼 내 브랜치의 시작점을 최신 베이스 브랜치로 만드는 작업을 말합니다. 어떻게 보면 히스토리를 조작하는 것이라고 볼 수도 있습니다.
이런 Git rebase의 장점은 타겟 브랜치의 최신 버전을 항상 내 브랜치 앞쪽에 배치해 가독성을 높이고 코드 리뷰를 편리하게 만든다는 것입니다. 다만 rebase를 할 때 force push 등 다소 까다로운 부분들이 있으니, 내 팀의 사정에 맞게 잘 고려하고 사용하는 것이 중요하다고 합니다.
git rebase --abort: rebase 취소하고 나가기
git rebase --abort
git rebase 역시 merge처럼 두 브랜치를 합치는 일이기 때문에 코드 간 충돌이 발생할 때도 있는데요, 충돌이 너무 많다 보면 rebase 과정에서 잘못된 코드를 선택하는 경우도 종종 있습니다. 이때 그 과정을 하나씩 거슬러 올라가서 수정할 수 있다면 좋겠지만, 때로는 rebase를 아예 취소하고 처음부터 다시 하고 싶을 때도 있는데요.
이 때 아주 가끔이지만 유용하게 사용하는 명령어가 --abort입니다. abort는 영어로 '중단하다'라는 뜻으로 이 명령어를 사용하면 아예 rebase를 하지 않았던 것처럼 모든 과정이 취소되고 git rebase 명령어를 치기 전처럼 내 코드가 돌아가게 됩니다. 물론 git rebase 후 최종 push를 하기 전에만 사용할 수 있어요. 모둔 rebase 과정이 취소되기 때문에 주의하세요!
git cherry-pick 'commit 번호': 다른 branch에서 특정 commit만 내 branch로 가져오고 싶을 때
git cherry-pick 'commit 번호'
git cherry-pick은 동료의 커밋, 혹은 나의 지난 커밋에서 한 커밋만 쏙 빼오고 싶을 때 사용하는 명령어입니다. 사용법도 너무 간단한데요. 명령어 뒤에 해당 commit의 번호를 복사해서 입력하면 됩니다. 명령어를 입력하는 순간 해당 커밋이 내 브랜치에 복사됩니다. 어떤 브랜치든 상관 없어요.
git reset: 이전 상태로 돌아가고 싶을 때
git reset "옵션" "돌아갈 commit"
마지막 'git reset'은 아주 자주 쓰지는 않지만 이전 상태로 내 코드를 되돌리고 싶을 때 사용합니다. 실무에서는 사용할 일이 없을 것 같기도 하지만, force push 후 모든 커밋이 덮어씌워져 버린 후 이전 상태로 되돌아가고 싶을 때 아주 유용하게 사용합니다. force push를 했어도 내 로컬에는 이전 기록들이 남아있기 때문이에요. git reset에는 크게 세 가지 옵션이 있어 이 중 하나를 선택한 후, 마지막으로 돌아갈 commit을 입력하면 됩니다.
--hard
hard 옵션을 사용하면 돌아간 커밋 이후의 변경 이력은 모두 삭제됩니다.
--mixed
변경 이력은 모두 삭제하지만 변경 내용은 남아있습니다. 즉 unstage 상태로 코드는 남아있습니다.
--soft
변경 이력은 모두 삭제하지만 변경 내용은 남아있습니다. 그러나 stage 되어있습니다.
마지막으로...
우리가 개발하면서 만들어 내는 변경 사항들을 Git이 꼼꼼히 기록하고, 실수하면 되돌아 갈 수 있게 해주지만, 가장 확실한 방법은 GitHub, GitLab 같은 원격 저장소에 기록하는 것이겠죠? 언제나 컴퓨터나 프로그램에 문제가 생길 수 있기 때문에 열심히 작업하거나 일한 기록을 한 순간에 날리지 않도록 코드를 작성하면서 주기적으로 'git push'를 통해 중간 저장을 해주세요! 저 역시 한 시간에 한 번씩은 commit 또는 push를 하려고 노력하고 있답니다.
SSAFYcial SNS
인스타그램: https://www.instagram.com/hellossafycial
홈페이지: https://www.ssafy.com/
'Programming > ETC' 카테고리의 다른 글
개발자는 개발만 잘해도 될까 (0) | 2025.01.12 |
---|---|
JWT(JSON Web Tokens), OAuth(Open Authorization) (0) | 2023.09.24 |
[Low-code] 로우 코드 서비스 개발 툴, Retool (0) | 2023.08.28 |
SPA(Single Page Application) (0) | 2023.07.15 |
Apache, NginX, Tomcat의 개념(+ 웹서버, WAS, 로드밸런싱, 프록시) (0) | 2023.06.25 |
댓글