Git 작업영역
Working Directory : 이력 관리 대상(tracked) 파일들이 위치하는 영역
✓ 지정된 디렉토리에서 .git 폴더를 제외한 공간
✓ 작업된 파일이나 코드가 저장되는 공간
✓ add 전 상태Staging Area : 이력을 기록할, 다시 말해 commit할 대상 파일들이 위치하는 영역
✓ .git 폴더 하위에 파일형태로 존재(index)
✓ add 후 상태Repository : 이력이 기록된(committed) 파일들이 위치하는 영역
✓ .git 폴더에 이력관리를 위한 모든 정보가 저장, 관리됨
✓ commit 후 상태
- git checkout <브랜치 명> == git switch : 해당 브랜치로 작업영역 바뀐다.
- ex)
git checkout develop -> develop 브랜치로 작업영역 변경
- git checkout <'commit id'> : 해당 커밋내역으로 작업영역 바뀐다.
- ex) git checkout 81c183r -> commit id가 81c183r인 작업영역으로 바뀐다.
- 해당 커밋에서 새로운 작업을 하고, 그 작업영역 그대로 새로운 브랜치로 만들고 싶다면
git branch "새로 만들 브랜치명" "commit id"
- git checkout - : 최신 커밋으로 파일을 되돌린다.
: 현재 작업하는 브랜치의 최종 커밋을 가리키는 포인터
- git commit -m"커밋 메세지"
- git commit -am"커밋 메세지" : git add + git commit -m
- git commit --amend : 커밋 수정하기
▪ 커밋 메시지를 수정하려면 ‘-m’ 옵션 사용
▪ 저자 정보 등을 수정하려면 ‘--author’ 옵션 사용
▪ 커밋 메시지를 수정하지 않으려면 ‘--no-edit’ 옵션 사용
- git restore : 작업 디렉토리에서 변경된 파일을 되돌리는 데 사용 → 마지막 커밋 상태로 복원
- git restore --staged
▪ staging area(스테이징 영역)에서 파일을 복원하는 데 사용
▪ 목적: 스테이징된 파일을 언스테이징하여 다시 커밋되지 않도록 설정
▪ 동작: 파일을 스테이징 영역에서만 복원하고, 작업 디렉토리의 내용은 그대로 유지
- git rm --cache : 스테이징 영역에서 파일을 제거할 때 사용
- working directory에서 파일이 삭제되지 않는다.
- git rm : staging area + working directory 둘다 삭제
- 만약 실수로 git rm --cached가 아닌 git rm을 사용하여 파일이 삭제되었다면?
git restore --staged ttt.txt git restore ttt.txt
- git branch "브랜치 명" : 브랜치 만들기
- (main) -> git branch develop -> main에서 develop이라는 브랜치명을 가진 브랜치 만들기
- git branch -d "브랜치 명" : 브랜치 삭제하기
- git push -d origin "원격 브랜치 명" : github에 있는 원격브랜치 삭제
- git stash
- 작업하던 중 아직 add하지 않은 상황에서, 다른 것을 먼저 처리하거나 다른 브랜치로 이동할 때, 지금까지 작업하던 것을 임시저장 -> stack 형식
- git stash save "label 명" : 헷갈리지 않게 라벨을 지정해서 임시저장할 수 있음
- git stash pop : 임시저장해 놓은 작업물 다시 working directory에 가져오기
- 가장 나중에 저장한 것 먼저 나온다 -> STACK(FILO)
- git stash apply "stash 번호"
- Ex)
git stash pop stash@{2}-> 3번째(index가 2)로 저장한 임시저장본 가져오기
- git stash list : stash 목록 가져오기
- git stash drop : 임시저장 본 삭제
- stash pop 같은 경우, 적용하고 바로 해당 stash가 사라지지만,
stash apply 같은 경우, 적용만 하고 사라지지 않는다.
- git stash branch : 현재 작업중인 내역으로 새로운 브랜치 생성
- git clean : untracked 파일 삭제
- git clean -n : 삭제할 목록만 확인, 실제로 삭제 X
- .gitignore에 정의된 파일은 대상이 아님
- git clean -d : ignore file외 untracked 파일 삭제(하위폴더포함)
- git clean -di : 안전하게 interactive하게!
- git clean -df : 강제로 삭제
- git clean -x : ignore file 포함 모든 untracked 삭제
- git clean -xi : 안전하게 interactive하게!
- git clean -xf : 강제로 삭제
- git clean -X : only ignore file만 삭제
- merge에는 총 3가지 방식이 있다.
- Merge
1.1 Fast-Forward merge
1.2. 3-Way merge- Rebase
- Squash
1.1 Fast-Forward merge
시간의 흐름대로 커밋된 내역을 병합
충돌(conflict) 발생 없고 100% Auto-merge
merge 후 모든 commit이 복제
1.2 3-Way merge
두 개 이상의 브랜치로 파생된 커밋을 병합
충돌(conflict) 가능성 있음
병합 메시지(merge commit) 존재
2. Rebase
공통조상(base) 병합
3-Way ⇒ Fast-Forward 화
Squash
- 많은 커밋의 양이 생기는데 여러 개의 커밋을 하나로 합치는 기능을 말한다.