-
[Git] Git 이론 익히기Git 2024. 6. 5. 23:23
1. Git이란?
- Git은 소스 코드를 관리하기 위한 분산 버전 제어 시스템
- 버전 제어 시스템이란 사용자가 파일을 수정할 때 변경 사항을 기록하고 저장하므로 언제든지 이전 버전의 작업을 복원할 수 있는 시스템
1-1. Git 구성 요소
- 작업 트리
- 작업 중인 파일로 구성됨
- 수정 할 수 있는 파일 시스템
- 인덱스
- 스테이징 영역으로도 불림
- 커밋이 준비되는 곳
- 저장소
- 프로젝트 파일의 모든 변경 사항을 추적하는 “컨테이너”
- 팀이 만든 모든 커밋 보관

1-2. 기본 Git 워크플로
- 작업 트리에서 파일을 수정
- 다음 커밋에 포함하려는 변경 사항을 준비합니다.
- 변경 사항을 커밋합니다. (커밋하면 인덱스에서 파일을 가져와 저장소에 스냅샷으로 저장합니다.)
2. 저장소
- 저장소는 코드를 저장하기 위해 중앙에 위치한 폴더
- 파일과 디렉터리가 포함된 Git 저장소가 있으면 변경 사항 및 버전 추적을 시작할 수 있음
2-1. 원격 저장소 대 로컬 저장소
- 로컬 저장소는 개별 사용자를 위해 로컬 컴퓨터에서 호스팅 됨
- 호스팅이란 서버 컴퓨터 전체 또는 일정 공간을 이용할 수 있도록 임대해 주는 서비스
- 원격 저장소는 인터넷, 외부 서버, 다른 경로에 있는 동일한 시스템에서 호스팅되고 여러 팀 구성원 간에 공유됨
2-2. 저장소 생성
- 새 저장소: GIt init 명령을 사용하여 처음부터 새 저장소 생성
- 복사된 저장소: Git clone 명령을 사용하여 원격 저장소를 로컬 시스템에 복사할 수 있음
3. 변경 사항 기록
- Git은 모든 변경 사항을 자동으로 기록하지 않으므로 인덱스에서 해당 변경 사항을 준비하여 기록하려는 변경 사항을 Git에 알려야 함
- 스테이징 후 해당 변경 사항을 커밋하여 저장소에 기록할 수 있음
3-1. 변경하기
- 작업 트리에서 변경(파일 편집, 새파일 추가, 불필요한 파일 제거)
- 작업 트리의 변경 사항은 저장소와 작업 트리 사이에 있는 인덱스에 수정된 것으로 기록되지만 저장소에 직접 저장되지는 않음
- 모든 변경 사항은 먼저 인덱스에 스테이징된 다음 저장소에 저장
- 인덱스의 변경 사항만 저장소에 커밋됨
→인덱스 거쳐서 변경사항 반영됨
3-2. 변경 사항 커밋
- Git commit 명령을 사용하면 저장소의 Git 기록에 파일 변경 사항을 기록할 수 있음
- 커밋한 모든 변경 사항은 각 파일 또는 디렉터리에서 시간순으로 확인 가능
3-3. Git commit 메시지
- 커밋을 진행할 때 메시지를 입력해야 하는데, 변경 사항을 간결하고 정확하게 설명해야 한다.
4. 변경 취소
- git에서는 실수를 취소할 수 있음
- 새 커밋을 만들때 프로젝트의 스냅샷을 저장하므로 필요할 때 이전 버전으로 돌아갈 수 있음
- 주요 방법: git revert, gir reset
4-1. 커밋 취소
- Git revert : 이전 커밋 취소
- revert 명령은 이전 커밋의 변경 사항을 되돌리는 새 커밋을 만듦
- 커밋을 제거하거나 저장소 기록을 수정하지 않아도 되므로 기록이 보존됨

4-2. 커밋 제거
- Git reset : HEAD가 이전 커밋을 가리키도록 함
- 재설정 모드로 전환하여 재설정 명령의 범위 지정

4-3. 재설정 모드
- 혼합 (기본) 모드는 변경된 인덱스의 상태를 복원합니다.
- 소프트 모드는 이전 커밋을 취소합니다.
- 하드 모드는 커밋의 모든 흔적을 제거합니다.
5. 저장소 동기화
- 어디에서 호스팅을 하든 다른 팀 구성원과 변경 사항을 공유하려면 로컬 저장소를 원격 저장소와 자주 동기화해야 함
- Git push, git pull, git merge
5-1. 변경 사항 푸시
- 변경 사항을 다른 사람과 공유하려면 git push을 사용하여 원격 저장소에 푸시
- 이렇게 하면 원격 저장소가 업데이트 되고 로컬 저장소와 동기화 됨

5-2. 변경 사항 풀링
- 누군가 공유 원격 저장소에 변경 사항을 푸시할 때마다 로컬 저장소가 구식이 됨
- 로컬 저장소를 새로 업데이트된 원격 저장소와 다시 동기화하려면 git pull 실행
- 풀 명령이 실행되면 원격 저장소에서 최신 개정 기록을 다운로드하고 로컬 저장소로 가져옴
5-3. 변경 사항 병합
- 로컬 저장소가 오랜된 경우 원격 저장소에 대한 푸시가 거부됨
- 이 경우 푸시하기 전 git merge를 사용해 원격 브랜치의 로컬 복사본에서 최신 변경 사항을 통합해야 함
5-4. 병합 충돌 해결
- 병합을 제대로 완료하기 전에 해결해야 하는 충돌이 발생할 수 있음
- 이런 일이 발생하면 Git은 충돌 파일에 충돌 해결 마커를 추가함
- 마커는 수동으로 해결해야 하는 파일 섹션을 파악하는 데 도움이 됨
6. Git 기록 관리
6-1. 커밋 수정
- Git commit —amend
- 동일한 브랜치에서 가장 최근 커밋 수정
- 새 파일이나 업데이트된 파일을 이전 커밋에 추가하는 데 용이함
- 이전 커밋에 커밋 메시지를 편집하거나 추가하는 간단한 방법

6-2. 새 브랜치에 커밋 복사
- Git rebase 을 실행하고 “-i” 옵션을 추가해 기록에서 개별 커밋을 다시 작성, 교체, 삭제, 병합
- 과거 커밋 메시지 다시 쓰기
- 커밋 그룹을 함께 스쿼시
- 커밋되지 않은 파일 추가

6-3. 다른 브랜치에 커밋 복사
- git cherry-pick
- 잘못된 브랜치에서 올바른 브랜치로 커밋을 이동합니다.
- 다른 브랜치의 기존 커밋을 기반으로 현재 브랜치에 커밋을 추가합니다.

6-4. 커밋 병합
- git merge —squash
- 새 커밋이 브랜치의 모든 커밋을 함께 그룹화하여 해당 커밋이 현재 브랜치에 병합됨

참고사이트
Learn | Nulab
Learn with Nulab. Our guides, how-tos, & content series offer tips to improve business management, career advancement, productivity, communication, & more.
nulab.com
리뷰
- 부트캠프 초반에 아래와 같이 배운내용을 글자 그대로 암기하듯이 받아들이기만 한 점이 학습하면서 아쉬웠다.
- 작은 프로젝트들을 진행하며 clone, push할 일들이 있었는데 정확한 이해가 부족한 채로 같은 방식만 반복해서 git을 활용했던 것 같다.
나중엔 최종 프로젝트를 진행하며 팀원과 git을 활용할 기회가 있었는데 이때에도 merge, 브랜치 정도만 알아둔채로 얼렁뚱땅 진행한 부분이 있었다고 느껴 시간이 남을 때, git 공부를 해두어야겠다고 다짐하였다.
- 더군다나 개발자로서 현업에서 일한다면 반드시 미리 알아두어야겠다는 생각이 들어 기본적인 개념부터 학습을 시작하였다.
- 한두번 정도 시간이 남을 때 강사님이 git에 관련된 어려운 문서를 제공해주신 적이 있는데 오히려 그런 자료를 보며 막연히 git에 대한 두렴이 커지기도 하였다.
- 하지만 이렇게 기초부터 차근히 공부하니 충분히 할 수 있겠다는 자신감이 생긴다.
- 백문이 불여일견이라고, 내일은 이론공부를 바탕으로 직접 이거저거 쳐보며 손과 뇌에 제대로 각인시켜야겠다.
1. 작성
git touch a.txt
2. 시작
git init
3. 상태 확인(?)
git config —global -l
4. 커밋 하기 (파일명 활용하여 개별적으로)
git add 파일명
5. 커밋명 작성
git commit -m “커밋명”
6.푸쉬하기 git remote add origin 링크
git remote -v
git push -u origin master