Studying/Git, GitHub

git 공부하기 -

creamymood 2025. 4. 1. 22:15

생소한 새 과목이 등장했습니다  - ✨

너무나 생소해서 의지가 살짝 꺾였지만 (?)

자바스크립트를 처음 접했을때도, 같은 감정이었지만 익숙해진 것 처럼.

자꾸 들여다 보기 위해 열심히 정리를 시작해봅시다 - 👏🏻


 

깃 꿀팁 🍯 - 각종 브랜치 만들 때, 헷갈리니까 그림 그려서(도식화) 생각해보기 !


💡 Git 완전 기초 개념 – 처음부터 쉽게 설명!

Git이 처음이라면 "이게 도대체 뭐지?" 라는 생각이 들 수 있어.
Git을 쉽게 이해하려면 "파일 저장소 + 타임머신" 이라고 생각하면 돼!


💭1. Git은 무엇인가? (한 줄 요약)

Git은 코드의 변화를 저장하고 관리할 수 있는 "버전 관리 시스템"
(파일을 계속 저장하면서, 언제든 과거로 돌아갈 수 있음!)

💡쉽게 말하면?

  • 파일을 수정할 때 "저장" 하는데, Git은 "이전 버전" 도 저장해둠.
  • 실수하면 되돌리기 가능!
  • 여러 사람이 함께 작업할 때도 겹치지 않게 관리 가능!

💭2. Git의 핵심 개념 (파일 저장 방식)

Git에서 파일은 3가지 상태로 나뉘어!

 

상태 설명 명령어
Untracked Git이 아직 모르는 파일 (새 파일) git add 파일명
Staged 커밋할 준비가 된 파일 (임시 저장) git commit -m "메시지"
Committed Git에 저장된 파일 (버전이 기록됨) -

Git을 이용한 프로젝트 시작(git init)

 

작업할 환경을 위해 로컬 저장소(Repository) 생성하기

기본 Branch명을 변경하셨다면 작업할 프로젝트 폴더를 생성 후 VScode로 폴더 열기를 합니다.

그리고 새 터미널을 열어줍니다.

로컬 저장소(Repository)를 깃 저장소로 만들기

VScode를 통해 로컬 저장소(Repository)를 폴더 열기한 후 터미널을 통해 아래 명령어를 입력하면 일반 로컬 저정소에서 깃이 관리하는 저장소로 변경할 수 있습니다.

 

 

위 명령어를 터미널에 입력하면 깃이 관리하는 저장소로 변경되는데 이유는 저장소를 생성한 폴더 내 아래와 같이 숨겨진 폴더가 생성되기 때문입니다.

 

Git이 폴더내에 숨겨진 .git폴더를 생성하는 것은, 깃이 내부적으로 코드의 상태 이력을 저장하기 위한 영역이 필요해서 입니다.

Git은 코드의 상태이력을 데이터베이스와 같은 시스템을 이용하지 않고, 자체적인 파일로 저장 합니다.

숨김폴더 확인하는 방법

  • window : 윈도우 탐색기 상단에 보기 > 표시 > 숨긴항목 클릭
  • Mac(단축키): command + shift + .

.git 폴더는 Git 내부에서 일어나는 모든 이벤트에 정보를 저장하고 있기 때문에 해당 폴더가 삭제되면 이전에 기록의 확인이 및 버전(commit)의 이동이 불가하게 됩니다.

위에서 언급된 내용을 요약하면,

숨겨진 폴더인 .git 폴더에는 깃 저장소에 필요한 모든 뼈대 파일이 담겨 있습니다. 이는 깃의 데이터를 기록하고 관리하는 뼈대가 되는 중요 파일입니다. 그리고 이러한 중요 파일들을 일일이 수작업을 만들 필요 없이, 깃의 init 명령어로 손쉽게 자동 생성 할 수 있습니다.


status 명령어와 .gitignore 파일 만들어 활용하기

파일의 상태를 확인할 수 있는 git status 명령어

 

화면을 보시는 Untracked files 아래에 생성한 2개의 파일을 확인할 수 있습니다.

git status 명령어를 입력하면 스테이지 상태를 확인할 수 있습니다. 스테이지는 임시 영역으로 작업한 컨텐츠의 실제 파일 내용은 직접 가지고 있지 않습니다.

Git은 워킹 디렉터리에서 바로 저장소로 저장하지 않고 중간 단계인 스테이지 영역을 이용합니다. 그 이유는 나중에 배우게 될 commit을 빠르게 하기 위해서 입니다.

commit을 빠르게 처리할 수 기술적 원리는 스테이지 영역에는 이전 commit 이력과 비교해 변경된 내용만 저장하고 새로운 commit이 발생하면 스테이지에 있는 변경된 내용들만 찾아서 반영만하면 되기 때문에 빠르게 commit을 진행할 수 있습니다.

그리고 Git의 스테이지 영역은 크게 Untracked, Tracked 두 가지 상태로 나뉩니다.

파일을 새로 만들 경우 Untracked 상태가 됩니다. 즉, Git이 해당 파일을 추적(관리)하지 않고 있는 상태를 말합니다.

git status 명령어를 입력하면 위에서 설명한 내용 처럼 방금 만들어진 front.yamlback.yaml은 Untracked 상태인 것을 확인할 수 있습니다.

 

Untracked 상태인 front.yamlback.yaml 파일을 앞서 설명한 임시 저장영역인 Staged로 올리기 위해 git add 명령어를 사용합니다.

 

그럼 git add . 을 사용해 그 결과를 확인해 보겠습니다.

 

back.yaml과 front.yaml 파일이 Staged 올라가 초록색으로 변한것을 확인할 수 있습니다. 스테이지에 올라가 있기 때문에 이제는 저장소 이 변경된 상황들을 전달할 수 있는 상태가 되었습니다.

.gitignore 파일을 이용해 특정 파일이 스테이지로 이동하지 않게 만들기

.gitignore 파일 : 파일을 생성 후 관리를 원하지 않는 파일을 추가하면 git에서 관리하지 않게 됩니다.

 

.gitignore 파일 생성 후 원하는 파일명 기재


Git을 이용해 첫 commit 남겨 보기

 

commit 명령어를 이용해 첫번째 버전을 만들기 앞서 우선, git status 명령어를 통해 스테이지에 등록된 파일들을 다시 한번 확인해 보겠습니다.

현재 확인 가능한 스테이지의 파일들은 commit 명령어를 이용해 하나의 버전으로 만들 수 있습니다.

commit 명령어로 하나의 버전을 만들면 스냅샷 형태로 저장을 합니다. 이는 현재 상황을 사진으로 찍어 보관하는 것과 같다고 생각하시면 됩니다.

이러한 각 시점의 스냅샷을 git에서 커밋이라 부르고, 커밋을 만드는 과정 역시 커밋이라 합니다.

commit 명령어

#commit을 만드는 명령어 : -m은 뒤에 commit 메시지를 입력할 수 있도록 해주는 옵션
git commit -m "커밋 메시지"

#변경된 모든사항을 바로 add하고 commit하는 명령어
git commit -am "커밋 메시지"

#commit 메시지 예시
git commit -m "first commit"
git commit -am "first commit"

 

 

축하드립니다. 여러분 우리의 첫 번째 커밋이 만들어졌습니다. 커밋은 영구적으로 저장되며 commit 당시에 내용은 변경할 수 없습니다. 단, commit 메시지는 변경할 수 있습니다.

vim 편집기로 commit 메시지 입력해보기

“git commit -m” 명령어에서 “-m” 옵션을 제외하고 “git commit”만 입력할 경우 vim이라는 문서 편집기 화면이 나타납니다.

 

Vim 편집기 화면이 노출되면 아래 순서대로 진행하시면 메시지를 입력할 수 있습니다.

  • i 키를 눌러서 문서 편집 모드로 진입합니다.
  • first commit를 최상단에 입력합니다.
  • ESC 키를 눌러서 문서 편집 모드에서 빠져나옵니다.
  • shift + : 을 누른 후 w와 q를 동시에 입력해줍니다. 여기서 wq는 메시지를 저장(write)하고 편집을 종료(quit)한다는 의미입니다.

 

입력 시작 : i

입력 후 : esc

저장 없이 종료 :q

저장 후 종료 : wq


commit 이력을 확인할 수 있는 git log 명령어 설정

그럼 commit된 이력은 어떻게 확인할까요?! git log 명령어로 확인해 볼 수 있습니다.
 

commit한 사용자 이름과 이메일 주소 그리고 일자 등 다양한 정보를 확인할 수 있습니다.

이외에도 git log 명령어에는 다양한 옵션이 존재합니다.

 

한 줄로 보기 

git log --oneline

 

자주 사용되는 그래프 로그 보기

git log --all --decorate --oneline --graph

* reset으로 이전 commit 돌아가기

#log 정보 확인 후 커밋 해시 확인 및 복사
git log

#복사한 커밋 해시를 이용해 reset 명령어와 원하는 옵션을 사용합니다. 
git reset --hard [커밋 해시]
git reset --soft [커밋 해시]
git reset --mixed [커밋 해시]

#다시 한번 log를 활용해 정상적으로 reset이 되었는지 확인
git log

** 해시가 너무 길다면, git log --oneline을 하면 앞 7자리만 볼 수 있고, hard, soft, mixed 뒤에 붙이면 됌.

실무에서는 reset보다는 revert로 많이 commit을 함. reset은 혼자서 할 때 주로.

 

reset에 사용할 수 있는 옵션은 hard 외 soft, mixed 2가지가 더 있습니다.

  • hard : 이전 commi으로 되돌린 후, 그 이후 이력들을 모두 삭제
  • soft : 이전 commit으로 되돌린후, 그 이후 이력들의 내용이 삭제되지 않고 stage에 올라가있어 언제든지 commit을 진행할 수 있는 상태가 됨
  • mixed : 이전 commit으로 되돌린후, 그 이후 이력들의 내용이 삭제되지 않았지만 다시 commit하기 위해 서는 다시 add 명령어를 이용해 stage에 올려 commit을 진행해야 함

Reset은 언제 사용하나요?

  • 혼자만 사용하는 브랜치인 경우
  • origin에 있지만 아무도 이 브랜치를 사용하지 않는다는 확신을 가지는 경우

결국…. 혼자하는 프로젝트에서 사용하는 용도에 적합하다고 생각하시면 됩니다.

그 외 거의 모든 경우에서 commit을 되돌릴때 revert를 사용합니다.


실수로 Reset hard로  진행해 사라진 커밋 되돌리기

 

reflog 명령어 사용하기

reflog 명령어을 이용하면 reset으로 사라진 커밋을 복구할 수 있습니다.

reflog 는 reference(참조)와 log(로그)의 합섭어로 HEAD의 참조 이력을 로그 형태로 출력해 주는 명령어 입니다.

git reflog

reflog는 프로젝트가 위치한 커밋이 바뀔 때마다 기록되는 내역을 보여주고 이를 사용하여 reset하기 이전 시점으로 프로젝트를 복구할 수 있습니다.

git reflog 명령어를 통해 복구를 원하는 해시 값을 확인 후 아래 명령어를 이용하면 commit을 복구할 수 있습니다.

git reset --hard 해시값

** 해시가 너무 길다면, git log --oneline을 하면 앞 7자리만 볼 수 있고, hard, soft, mixed 뒤에 붙이면 됌.

실무에서는 reset보다는 revert로 많이 commit을 함. reset은 혼자서 할 때 주로.


branch에 대해 알아보기

Branch : 브랜치는 독립적으로 어떤 작업을 진행하기 위한 개념이다.

동일한 소스코드 위에서 어떤 개발자는 버그를 수정하기도 하고 또 다른 개발자는 새로운 기능을 만들어 내기도 합니다.

여러 사람이 동일한 소스코드를 기반으로 다른 작업을 할때에는 서로 다른 버전의 코드가 만들어 질 수 밖에 없습니다.

이럴 때, 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어 주는 기능이 바로 ’브랜치(Branch)’ 입니다.

브랜치(Branch)’를 이용한다면 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있고, 이렇게 분리된 작업 영역에서 변경된 내용은 나중에 원래의 버전과 비교해서 하나의 새로운 버전으로 만들어 낼 수 있습니다.

쉽게 말하면 협업 중인 코드를 나만의 연습장에 그대로 복사해서 작업하는 것

필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 아래 그림과 같이 여러 작업을 동시에 진행할 수 있습니다.

 

또한, 이렇게 만들어진 branch는 다른 branch와 병합(Merge)함으로써, 작업할 내용을 다시 새로운 하나의 브랜치로 모을 수 있습니다.

아래 그림을 보면, branch를 사용하여 동시에 여러 작업을 진행하다가 Master or main branch에 병합(Merge)하는 과정을 볼 수 있습니다.

 

 

 

여러명이 동시에 작업을 할 때는 다른 사람의 작업에 영향을 주거나 받지 않도록, 먼저 메인 branch에서 자신의 작업 위한 전용 branch를 생성합니다.

그리고 작업을 진행한 후, 작업이 끝난 사람은 메인 branch에 자신의 branch의 변경 사항을 적용합니다.

이렇게 함으로써 다른 사람의 작업에 영향을 받지 않고 독립적으로 특정 작업을 수행하고 그 결과를 하나로 모아 나가게 됩니다.

이러한 방식으로 작업할 경우 ‘작업 단위’

즉, branch로 그 작업의 기록을 중간 중간에 남기게 되므로 문제가 발생했을 경우 원인이 되는 작업을 찾아내거나 그에 따른 대책을 세우기 쉬워집니다.

Git Branch의 장점은 바로 Branch모델이라고 말할 정도로 Git의 branch는 다른 버전 관리 시스템들과 구분되는 특징을 가지고 있습니다.

프로젝트를 통째로 복사해야하는 다른 버전 관리 시스템과 다르게 브랜치(Branch) 기능을 이용해 순식간에 기존 프로젝트를 바탕으로 별개의 작업을 진행할 수 있습니다.

브랜치 생성 / 이동 / 삭제하기 / 이름 바꾸기

# 브랜치 생성
git branch [브랜치 명]
예) git branch oz

# 브랜치 목록 확인
git branch

# 생성한 Branch로 이동
git switch [브랜치 명]
예) git switch oz

# 브랜치 생성과 동시에 이동하기
git switch -c oz

# 브랜치 삭제하기
git branch -D (삭제할 브랜치명)
예) git branch -D oz

# 브랜치 이름 바꾸기
git branch -m (기본 브랜치명) (새 브랜치명)
예) git branch -m oz oz_new

merge는 이력이 남는다 !

머리에 제대로 안그려진다면, 도식화 해서 직접 그려보기 !

branch 합치기(merge)

Branch 합치기

생성한 branch에서 작업한 결과물을 main branch에 합치는 2가지 방법이 있습니다. 바로 merge와 rebase 입니다.

merge와 rebase는 브랜치에서 commit 이력을 main의 커밋 이력과 합치는 기능은 동일합니다.

하지만, 브랜치의 이력을 남기는지(merge) 아니면 이력을 남기지 않고 합치는지(rebase) 목적에 따라 다르게 사용될 수 있다.

 

Merge

Merge를 진행하기 위해서는 main branch이동 후 진행해야 합니다.

#원하는 branch로 이동하는 명령어
git switch [이동을 원하는 branch]

#main에 branch의 커밋 이력을 합칠때 사용하는 명령어
git merge [합치고 싶은 branch]

예) 
git switch main
git merge oz
#log 명령어를 통해 합쳐진 이력 확인
git log


출처 : 챗지피티, 오즈코딩스쿨강의자료