프로젝트의 버전 관리와 백업 그리고 협업을 위해서 GIT을 사용한다.
버전관리는 디버깅을 위한 것 ! !
VS실행 - 폴더 생성 - New File - 폴더이름.txt - Source Control
git config --global user.name "name"
git config --global user.email "your@mail.com"
git log
: 버전 확인
VS 단축키
- Ctrl + J : 터미널 보기/닫기
- Ctrl + B : 왼쪽 사이트 탭 보기/닫기
보기 쉽게 버전 확인 가능
Working Directory -> Staging Area -> Repository
- Working Directory : 작업할 파일이 있는 디렉토리
- Staging Area: 커밋(Commit)을 수행할 파일들이 올라가는 영역
- Repository (.git) : Git 프로젝트의 메타 데이터와 테이터 정보가 저장되는 디렉토리
HEAD -> main -> B(새로 만들어진 버전) -> A(B의 이전 버전)
- HEAD : Working Dir의 버전
- Checkout : HEAD 변경
만약 v2 커밋으로 checkout하고 새로운 커밋 e1을 만든 후, 다시 main 브랜치로 돌아가면, e1은 해당 브랜치의 히스토리에서 보이지 x.
이는 Git에서 브랜치가 특정 커밋을 가리키는 포인터처럼 동작하기 때문.
하지만 e1 커밋은 여전히 Git 내에 존재하며, 커밋 해시를 알고 있으면 언제든지 git checkout <commit_hash>
명령어로 다시 해당 커밋으로 돌아갈 수 있다.
git reflog
: HEAD의 이동 기록
git checkout <commit_hash>
: 해당 커밋으로 head 이동
git branch <branch_name>
: 브랜치 생성
git checkout <branch_name>
: 브랜치 전환
예를 들어, exp 브랜치에서 작업을 마치고 이를 main 브랜치에 병합하려면
git checkout main
: main 브랜치로 전환git merge <exp>
: exp 브랜치의 변경 사항을 병합
만약 같은 파일을 다른 branch에서 수정한 후 합친다면?
checkout : HEAD 변경
reset : HEAD가 가르키는 branch를 변경
그럼 main브랜치에 origin이 생긴 것을 확인할 수 있다.
main/origin
: remote tracking branch
위와 같은 상태는, 현재 아직 push되지 않은 버전이 존재하는 것은 확인할 수 있다.
push하면 위처럼 변경 된다.
서로 다른 사람이 다른 파일을 생성한다면?
fetch
: 다운로드 . 원격 저장소의 내용을 가져온다.pull
: fetch + mergysync
: pull + push
right에 pull -> push 하면 정상적으로 올라간다!
이후 left 사용자 또한 pull 하여야 push가 가능하다.
서로 다른 사람이 같은 파일을 수정 한다면?
common.txt 파일을 left에서 수정한 후 commit -> push
right 사용자는 pull 하면 같은 left와 상태가 됨
이상태에서 각각 변경한다면
left 사용자 push : 성공
right 사용자 pull : conflict
충돌한 코드를 수정한 후 mergy하면 커밋이 가능하다