Git의 세 가지 주요 영역
Working Directory - Staging Area - Repository
Working Directory
• 작업 중인 실제 디렉토리
• 파일 작성, 수정, 삭제 등의 모든 작업이 이루어지는 공간
Staging Area
• Commit으로 기록할 파일이 준비되는 임시 저장소
• 특정 상태의 파일만 선택적으로 Commit에 포함 가능
• git add 명령으로 변경된 파일을 올려 준비 상태로 만듦
Repository
• Commit으로 저장된 파일과 이력을 관리하는 공간.
• 로컬 저장소와 원격 저장소로 나뉘며, 원격 저장소는 GitHub와 같은 서비스를 사용
• git commit으로 Staging Area의 파일이 이곳에 저장됨
git add
Working Directory에서 변경된 파일을 Staging Area로 올림
• 상태 변화:
• Untracked → Staged: 새 파일을 Git이 추적하기 시작
• Modified → Staged: 수정된 파일이 Commit 준비 상태가 됨
git add 파일명
특정 파일만 Staging Area에 올림.
git add .
모든 변경 사항을 Staging Area에 올림.
git commit
Staging Area의 파일들이 하나의 commit으로 남겨지며 버전으로 기록
• 상태 변화:
• Staged → Committed: 저장소에 기록된 상태
git commit -m "커밋 메시지"
"커밋 메시지"와 함께 Commit
• 커밋 메시지는 변경 내용을 명확히 기록해야 협업 시 유용
• 커밋 메세지는 최대한 자세하게 적자! (나는 마음대로 적는다 ! 아무렇게나 ! 나만 알아보면 ㅇㅋ ! 협업할 때를 위해서 고쳐야겠다 !)
git status
현재 Working Directory와 Staging Area의 상태를 확인
• 주요 출력 내용:
• Untracked files: Git이 아직 추적하지 않는 파일
• Changes not staged for commit: 수정되었으나 Staging Area에 올리지 않은 파일
• Changes to be committed: Staging Area에 올라온 파일
git log
저장소의 Commit 내역을 확인
git log
Commit ID, 작성자, 날짜, 메시지를 출력
q
log 화면에서 나가기
Git의 기본 작업 사이클
1. Working Directory에서 파일 작성 또는 수정
2. git add로 Staging Area에 변경 사항 추가
3. git commit으로 Repository에 저장
4. 변경 사항이 생기면 1~3 반복
Commit 삭제
Commit은 원칙적으로 삭제하지 않는 것이 좋음
실수를 되돌리고 싶다면,
• git revert
특정 Commit을 되돌리는 새 Commit 생성
• git reset
Commit 이력을 수정하거나 초기화
특정 커밋 삭제
Git의 철학은 변경 이력의 불변성을 중시하므로, 특정 커밋을 삭제하는 방법은 기본적으로 제공되지 않음
그러나 로컬 브랜치에서 커밋 이력을 재구성하거나 삭제하는 방법은 존재함
삭제 방법
1. Interactive Rebase로 삭제
git rebase -i HEAD~5
최근 5개의 커밋 대상
pick을 drop으로 변경하여 삭제할 커밋 지정
pick 123abc 1번 커밋
pick 456def 2번 커밋
pick 789ghi 3번 커밋
pick 012jkl 4번 커밋
pick 345mno 5번 커밋
pick 123abc 1번 커밋
pick 456def 2번 커밋
pick 789ghi 3번 커밋
drop 012jkl 4번 커밋
pick 345mno 5번 커밋
이렇게 최근 5개의 커밋이 있다고 가정하고, Rebase에서 네 번째 커밋을 pick-> drop으로 변경
결과적으로 네 번째 커밋은 삭제된 상태로 재작성된 새로운 이력이 만들어짐
1번 커밋 (123abc)
2번 커밋 (456def)
3번 커밋 (789ghi)
5번 커밋 (345mno)
4번 커밋이 이미 원격 저장소에 푸시된 상태라면 drop후 git push --force로 강제 푸시 해야 원격에 푸시됨
삭제된 커밋 데이터는 Git의 객체 데이터베이스(.git/objects/), Reflog에 남아있음
Git은 주기적으로 Garbage Collection(GC)를 실행하는데 기본적으로는 90일동안 참조되지 않은 객체를 보관 후 삭제한다고 함..(설정 변경 가능하다고 하는데 해본 적 없고 해볼일도 없을 것 같음)
이건 자동이고, 수동으론 git gc 명령어로 실행가능
나같은 애들은 쓸 데 없이 용량차지 한다며 git gc졸라게 누를것 같음. .. .... ... . .. 그리고 뭐하나 나중에 복구해야된다며 왜 없냐고 울고불고 한번 눈물 쏟고 나서는... git gc같은건 안하겠지.
git reflog
git checkout <삭제된 커밋 해시>
삭제된 커밋 확인하고 작업 브랜치로 복구
git fsck --lost-found
Git 객체 데이터베이스에서 복구(참조되지 않은 커밋이나 파일 찾을 수 있음)
2. git reset
git reset --hard [커밋 ID]
• 해당 커밋 이후 모든 이력이 삭제
이것두 위와 마찬가지로 복구 가능
3. git filter-repo
전체 저장소에서 특정 커밋을 제거
Git Filter-Repo 도구 설치 필요
git filter-repo --commit-callback '
if commit.message == "삭제할 메시지":
commit.message = None
'
Git Filter-Repo얘는 python기반 유틸리티인데 git 기본 명령어가지고 처리하기 어려운 작업을 해결하려고 설계됐다함. 하여튼 얘를 써서 삭제하면 복구불가하다니까 백업 필
주의
원격 저장소에 푸시된 커밋은 삭제 시 협업 환경에 혼란을 초래할 수 있으므로 신중히 판단
VSCode 실행
• Git 디렉토리에서 code . 명령어 실행 시, VSCode가 열림
• code 명령이 동작하지 않으면 VSCode 설치 경로를 환경 변수에 추가해야 함
GitHub 시작하기
Github 회원가입 > Git에 계정 정보 넣어주기 > 연결하고 Git Commit
1. GitHub 계정 생성
2. Git에 계정 정보 넣어주기:
git config --global user.name "회원가입할 때 입력한 username"
git config --global user.email "회원가입할 때 입력한 email"
3. GitHub에 원격 저장소 생성 후, 로컬 저장소와 연결:
git remote add origin [원격 저장소 URL]
git push -u origin main
Git의 철학
• Git은 버전 관리의 투명성과 변경 이력 보존을 중시
• 변경 사항을 기록하고 공유하며, 되돌릴 수 있도록 설계됨
'Git Github' 카테고리의 다른 글
Git (4) | 2024.12.19 |
---|---|
Markdown Syntax Guide (3) | 2024.12.19 |