-분명 git을 배웠는데 실전으로 들어가니 계속 박살이 나서... 내가 꺼내 써 보려고 쓰는 정리법입니다
-아직 세달차 응애라 틀린부분이나 아쉬운 부분이 있을 수 있습니다. 많은 조언과 관심 주시면 감사하겠습니다
준비물: gitHub/업로드할 작업물/터미널/ 박살나도 무너지지않을 강인한 멘탈
1.기본이론
-git과 github의 차이
1)git
-버전관리 시스템(VSC)
-로컬 컴퓨터(내컴퓨터)에서 작동하는 프로그램
2)github
-git이 관리하는 버전 기록을 공유할 수 있는 웹사이트
-구글 드라이브처럼 개인 사용자가 이용할 수 있는 저장소를 제공
-저장소에 파일을 업로드하거나 다운받을 수 있음
-git의 3가지 영역
1.working directory(작업 디렉토리)
-실제 작업하는 공간(실제 내폴더)
-파일을 생성,수정,삭제하는 곳
-git이 변경사항을 추적하지 않는 상태
-git add 명령어로 파일을 스테이징 영역으로 이동시킬 수 있음
2.staging Area(스테이징 영역)
-커밋할 파일들을 선별하는 공간
-변경사항을 커밋하기 전[임시 저장소]
-스테이징 영역에 올라온 파일들은 git이 변경사항을 추적하기 시작함
-git commit 명령어로 파일을 로컬 레파지토리로 이동시킬 수 있음
-> [나만의 이해방식]
add를 시킨 상태
아직은 나에게 되돌릴 기회가 남아있는 상태
3.local repository(내 컴퓨터 저장소, .git폴더)
-하나의 완성된 버전이 저장되는 공간
-버전을 저장하는 영구저장소
-과거의 버전 기록을 모두 저장/관리
-.git 디렉토리에 실제 버전 정보가 저장됨(.git 삭제하면 기록 모두 사라짐)
->[나만의 이해방식]
commit을 시킨 상태
낙장불입임 끝났다고 보면 됨
나에게 할 수 있는 일이라곤 푸시로 원격 저장소에 보내는 것뿐
(되돌릴 방법이 없는 건 아니지만 큰 맘 먹고 집중해서 되돌려야하기 때문에 그냥 마지막 단계라고 생각하기)
-상태 변화 과정
새 파일 생성 → [Untracked]
│
▼
git add → [Staged]
│
▼
git commit → [Unmodified]
│
파일 수정 → [Modified]
│
▼
git add → [Staged]
- 스테이징한 파일을 수정하면 수정 상태가 된다.
- 수정 상태의 경우 Commit의 대상이 아니다.
- 수정 내용을 반영하여 Commit하고 싶다면 다시 `git add`로 스태이징 상태로 변경해야 한다.
2.git 초기설정
->git 설치/github 계정 생성을 완료 후 작업
->git 설치법은 나 또한 구글링 해서 했기 때문에... 구글링하는 걸 추천
- git 초기 설정 관련 명령어
1. `git --version`
- Git 설치 여부와 버전을 확인하는 명령어
- Git이 정상적으로 설치되었는지 확인할 때 사용
2. `git config --global user.name "YourName"`
- Git 사용자 이름을 전역으로 설정
- 모든 Git 저장소에서 사용할 사용자 이름 지정(중요)
3. `git config --global user.email "your.email@example.com"`
- Git 사용자 이메일을 전역으로 설정
- 모든 Git 저장소에서 사용할 이메일 주소 지정(중요)
4. `git config --global init.defaultBranch main`
- Git 저장소 생성 시 기본 브랜치명을 'main'으로 설정
- 최근에는 'master' 대신 'main' 사용을 권장
5. `git config --list`
- 현재 Git의 모든 설정 확인
- 전역 설정과 지역 설정 모두 표시
6. `git config user.name`
- 현재 설정된 사용자 이름만 확인
7. `git config user.email`
- 현재 설정된 이메일 주소만 확인
3.git 명령어(내가 많이 쓰는 거 위주)
-git 기본 명령어
->git bash는 CLI(command Line Interface)이다
->CLI는 모든 동작을 명령어를 작성해 실행
->git과 관련된 모든 명령어는 git으로 시작한다
(작업물을 로컬 저장소에 저장하는 명령어 순서이기도 함)
1. `git init`
- 현재 Working Directory를 Git 저장소로 초기화
- .git 폴더가 생성됨
- 처음 세팅할 때 한 번만 실행!
2. `git status`
- 현재 Git 상태를 확인하는 명령어
- 파일들의 상태를 보여줌:
- Untracked files: 추적되지 않는 파일
- Changes not staged: Modified 상태의 파일
- Changes to be committed: Staged 상태의 파일
3. `git add 파일명`
- 특정 파일을 Staging Area로 이동
- 파일이 Tracked(추적) 상태가 됨
- 주요 사용법 :
- `git add 파일명` : 특정 파일만 스테이징
- `git add .` : 현재 폴더의 모든 파일을 스테이징
- `git add 폴더명` : 특정 폴더의 모든 파일을 스테이징
- `git add *.txt` : 특정 확장자 파일만 스테이징
4. `git commit -m "커밋 메세지"`
- Staging Area의 파일들을 Repository에 저장
- 하나의 버전이 생성되는 것!
- -m : 커밋 메세지를 작성하는 옵션
- 커밋 메세지는 무엇을 어떻게 변경했는지 알아보기 쉽게 작성해야 함.
5. `git diff`
- 파일의 변경사항을 비교하는 명령어
- 주요 사용법:
- `git diff` : Working Directory의 변경사항 확인 (Staged 제외)
- `git diff --staged` : Staging Area의 변경사항 확인
- 출력 내용:
- `+` : 추가된 줄
- `-` : 삭제된 줄
- 변경된 부분 주변 코드도 함께 표시
-git 원격 저장소로 보내는 주요 명령어
1. remote : 원격 저장소 관리
1)`git remote add [별칭] [URL]`
- 현재 git 저장소에 원격 저장소를 추가하는 명령어
- 여러 원격 저장소와 연결 가능!!
2) `git remote -v`
- 연결된 원격 저장소 목록 확인
3) `git remote rename [기존별칭] [새별칭]`
- 원격 저장소의 별칭을 수정한다.
4) `git remote rm [별칭]`
- 등록한 원격 저장소를 삭제한다.
2. push : 원격 저장소에 업로드
1) `git push [별칭] [브랜치]`
- 로컬 변경사항 커밋을 원격에 업로드
- `` : origin이라는 원격저장소의 main브랜치에 업로드
2) `git push -f [별칭] [브랜치]`
- force 옵션을 사용하면 강제 push를 할 수 있음
- 원격 커밋 내역과 로컬 커밋 내역이 일치하지 않아도 강제로 밀어 넣음
(원격의 내용이 모두 덮어써짐)
- 매우 위험하므로 일반적인 상황에서 사용 금지!
1.pull : 원격 저장소에서 다운로드
1) `git pull [별칭] [브랜치]`
- 원격 변경사항 커밋을 로컬에 다운로드
- `git pull origin main` : origin/main에서 다운로드
+원격 저장소를 로컬로 복제
1.clone
-`git clone[원격저장소 URL] [복제경로]`
-원격 저장소를 통째로 로컬에 복제함
-원격 저장소의 .git폴더가 복제되므로 `git init`이 필요 없음
-자동으로 원격 저장소가 연결되므로 `remote add`필요없음
(그래도 `git remote-v`로 확인은 할 것)
-복제 경로에 (.)을 입력하면 현재 경로에 모든 파일을 복제해줌
-> 내가 원격저장소로 올린다 == 작업물을 에드 커밋/ 원격저장소 등록(remote)/ 작업물 내보내기(push)
->원격저장소를 통째로(처음으로) 로컬로 복제해온다 == 냅다 clone 때리기
->로컬에 어느정도 작업물이 있고(두번째부터) 원격저장소에서 로컬로 가져온다 == pull로 땡겨오기(로컬의 작업물이 init이 되어있는 상태에서)
++맥 사용자라면 원격저장소 등록할때 토큰이 필요하다 깃허브 세팅 페이지에서 토큰 생성(구글링추천)후
http링크로 remote 떄린 후 password에 내 토큰 복사해서 입력하면 됨
팀원으로서 git 사용하기
1.추가로 알아야 될 이론
1) 브랜치(Branch)
- 독립적인 작업 공간이다.(브랜치끼리 영향을 주지 않는다.)
- 브랜치를 새로 만들면 현재 작업 내용을 복사해서 새로운 작업을 시작할 수 있고, 원본을 유지할 수 있다.
- 브랜치를 새로 만드는 것은 평행 세계를 만드는 것과 유사하다.
## main 브랜치
- `git init`으로 깃 저장소를 만들면 기본적으로 생성되고, 사용하는 브랜치
- 과거에는 master 브랜치가 기본 브랜치였음
## 브랜치 주요 명령어
1. 브랜치 생성/확인
- git branch : 브랜치 목록 확인
- git branch [이름] : 새 브랜치 생성
2. 브랜치 이동
- git checkout [이름] : 브랜치 이동
- git checkout -b [이름] : 브랜치를 새로 생성하면서 이동
브랜치 생성 + 이동
3. 브랜치 삭제
- git branch -d [이름] : 브랜치 삭제
- git branch -D [이름] : 브랜치 강제 삭제
4. 브랜치 병합
- git merge [브랜치명] : 현재 내가 위치한 브랜치에 병합
- 예 : git merge login - 현재 내가 위치한 브랜치에 login 브랜치를 병합
## 브랜치 이동할 때 주의사항
1. 브랜치 이동 전 상태 확인
- `git status`로 현재 파일 상태 확인
- 작업 중인 파일이 있는지, 커밋되지 않은 변경 사항이 있는지 확인
2. 작업 중인 파일 처리
- 커밋되지 않은 파일은 다른 브랜치로 함께 이동된다!
- 그러므로 작업중인 파일은 처리한 후 이동한다.
3. 안전한 브랜치 이동 방법
- 현재 작업을 완성하지 못했어도 오류가 나지 않는 상태로 마무리한다.
(주석을 활용하는 등)
- 작업 내역을 처리하는 가장 쉽고 확실한 방법은 commit이다.
- 즉 commit 후 브랜치를 이동하기!
2)병합(merge)
# 병합(Merge)의 종류
1. Fast-Forward Merge
- 가장 단순한 병합 방식
- 병합하려는 브랜치에 변경 사항이 없을 때 발생
- 병합 당하는 브랜치의 커밋을 그대로 가져오는 방식
- 별도의 병합 커밋이 생기지 않음
2. 3-way Merge
- 두 브랜치와 공통 조상 커밋을 비교하는 방식
- 양쪽 브랜치에 새로운 커밋이 있을 때 발생
- 자동으로 병합 후 새로운 병합 커밋 생성
- 충돌이 없다면 자동으로 처리됨
+충돌(conflict)란?
1. 충돌이 발생하는 경우
- 3-way Merge에서 발생됨
- 양쪽 브랜치에서 같은 파일의 같은 부분을 다르게 수정
- Git이 어느것을 선택할지 판단 불가
- 사용자가 직접 선택해야함
2. 충돌 표시 형식
<<<<<<<<<< HEAD
현재 브랜치의 내용
=================
병합할 브랜치의 내용
>>>>>>>>>>branch 이름
3)원격저장소 (remote)
-remote -v: 현재 로컬 저장소에 설정된 **원격 저장소(remote)**의 URL과 이름을 확인
-remote add [이름] [원격저장소 URL] : 새 원격 저장소를 추가할 때 사용합니다.
1. 원격 저장소의 구조
- 원격 저장소도 로컬처럼 브랜치를 가짐
- 로컬의 브랜치와 원격의 브랜치는 독립적
2. 동기화 과정
- pull : 변경사항을 로컬로 가져온 후 merge
- push : 로컬의 변경사항을 원격에 업로드 후 merge(Fast-Forward만 가능)
3. 충돌이 발생하는 경우
- pull : 원격과 로컬이 같은 부분을 다르게 수정
- push : 충돌 상황이 발생되면, push가 안됨! (pull을 먼저 해야함)
원격에 새로운 커밋이 있는 경우에 충돌 상황이 발생됨
2.프로젝트 준비
1)팀레파지토리 내 깃허브로 포크따오기
2)포크따온 저장소 remote add(push 전용)->Rpush로 가정
3)팀프로젝트(작업물이 올라갈) 저장소 remote add(pull 전용)->Rpull로 가정
4) main 브랜치에 clone
5) checkout -b [작업브랜치] => 작업브랜치 생성과 동시에 클론 따온 밑바탕 작업브랜치로 떙겨오는것
3.작업 중 git 사용 순서
1) git pull [Rpull] main
- 팀레파지토리에 업데이트 된 상태가 있을 수 있으니 pull로 땡겨오기
2)git checkout [작업 브랜치]
-땡겨온 들고 작업 브랜치로 이동
3)작업하기 -> 작업브랜치에!!!!
4.작업 완료 후 git 사용순서
1) git pull [Rpull] main
- 작업 중에 또 업데이트 된 내역이 있을 수 있으니 한번 더 받아오기
2)git merge main
-들고 온 업데이트 정보 작업브랜치와 병합하기+충돌이 나는지 확인하기
3)git add/commit
-작업물 푸쉬 때릴 준비
4) git push [Rpush] [작업브랜치]
-작업물 날려!!!
5)깃허브 내에 내 포크에 들어와 제대로 들어왔는지 확인+ 들어왔으면 생기는 pr버튼(Pull Request) 눌러 팀레파지토리에 푸시 요청