💡Git 명령어 공부하기
.git 폴더가 형상관리를 해주는 폴더!
궁극적으로 .git 폴더만 잘 보관하면 기록이 남아있다.
타임캡슐에 묻기
- git status : untracked 파일 (git의 관리에 들어간 적 없는 파일)
- git add [파일명] : 파일 하나 담기
- git add [파일명, 파일명, …]
- git add . : 모든 파일 담기
- git commit : 커밋하기
- git commit -a : 커밋 메세지와 함께 커밋하기
- git commit -am : add랑 커밋 메세지와 한꺼번에 커밋하기 (🍎 새로추가된 untracked 파일 없을 때 한정)
- git log : 깃 상태 확인
- git log --all --decorate --oneline --graph : 여러 브랜치의 내역 편리하게 그래프로 보기
- git diff : 파일의 수정된 부분 보여줌
과거로 돌아가기
reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지웁니다.
- git reset --hard [돌아갈 커밋 해시]
- git reset --hard : 뒤에 커밋해시가 없으면 마지막 커밋을 가리킴
revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다.
- git revert [되돌릴 커밋 해시]
- git revert —no-commit [되돌릴 커밋 해시] : 커밋해버리지 않고 revert 하기, 원하는 다른 작업을 추가한 다음 함께 커밋
- 취소하고 싶으면 git reset --hard
브랜치 생성 / 이동 / 삭제하기
- git branch : 브랜치 목록 확인
- git branch [브랜치명] : 해당 브랜치 생성
- git switch [브랜치명] : 해당 브랜치로 이동
- git switch -c [브랜치명] : 브랜치 생성 & 이동하기
- git branch -d [삭제할 브랜치] : 브랜치 삭제하기
- git branch -D [강제삭제할 브랜치명] : 강제 삭제할 브랜치 (지워질 브랜치에만 있는 내용의 커밋이 있을 경우, 즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는 대문자 -D 로 강제 삭제해야함
- git branch -m [기존 브랜치명] [새 브랜치명] : 브랜치 이름 바꾸기
- git branch --all : 로컬과 원격의 브랜치들 확인
- git branch --a : 위에 명령어와 동일
브랜치 합치기
merge : 두 브랜치를 한 커밋에 이어붙입니다. (브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다.)
1. main 브랜치로 이동함
2. git merge [합칠 브랜치] : 현재 있는 브랜치에 [합칠 브랜치]를 한 커밋에 이어 붙임
→ merge도 하나의 커밋이라서 merge 하기 전 해당 브랜치의 마지막 시점으로 reset 사용해서 되돌리기 가능함
3. git branch -d [합쳐진 브랜치] : 다 합친 브랜치는 삭제해줌 (합칠 브랜치 === 합쳐진 브랜치)
rebase : 브랜치를 다른 브랜치에 이어붙입니다. (한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합합니다. 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋습니다.)
→ merge와 반대로 브랜치를 입력해야함
1. new-teams 브랜치로 이동함
2. git rebase [합쳐질 브랜치] : ex ) new-teams 브랜치가 main 브랜치로 합치려면 git rebase main 이라고 명령어 작성해야함
→ 소스트리에서 상태를 확인해보면, main 브랜치는 뒤쳐져있는 상황일 것임
3. main 브랜치로 이동 후, git merge new-teams 명령어를 입력해준 후 new-teams 브랜치 삭제
충돌 해결하기
merge 충돌 해결
- 충돌 해결이 어려우면 git merge --abort 로 merge 중단
- 해결 가능 시
- 충돌 수정함
- git add . → git commit 으로 병합 완료
- 병합 완료한 브랜치 삭제
main 브랜치에 new-teams를 merge 했다.
- accept current change : main 브랜치의 소스
- accept incoming change : new-teams에 있던 소스
- accept both changes : 둘다 사용함
rebase 충돌 해결
- 충돌 해결이 어려우면 git rebase --abort로 rebase 중단
- 해결 가능 시
- 충동 부분을 수정함
- git add . → git rebase --continue → 충돌이 모두 해결될 때까지 반복
- main 브랜치로 이동해서 git merge new-teams 로 마무리
- 병합 완료한 브랜치 삭제
원격 저장소 사용하기
- git remote add origin [원격 저장소 주소] : 로컬 git 저장소에 원격 저장소 연결
- 원격 저장소 이름에 흔히 origin 사용함 (다른 것으로 수정 가능)
- git branch -M main : 기본 브랜치명을 main으로 함
- git push -u origin main : 로컬 저장소의 커밋 내역을 원격 저장소 (origin) 으로 push (업로드)
- git push -set-upstream origin main : 위와 동일한 명령어
- git remote : 원격 목록 보기
- git remote -v : 원격 목록 자세히 보기
- git remote remove [origin 등 원격 이름] : 원격 지우기 (로컬 프로젝트와의 연결만 없애는 것. GitHub의 레포지토리는 지워지지 않음)
- git clone [원격 저장소 주소] : 해당 폴더 안에 프로젝트 다운받음
- git clone [원격 저장소 주소] . : 해당 폴더 안에 바로 프로젝트 다운받음
원격의 브랜치 로컬에 받아오기
- git fetch : 원격의 변경사항 확인
- git branch -a로 확인
- git switch -t origin/from-remote : 로컬에 같은 이름의 브랜치를 생성하여 연결하고 switch
- git push [원격 이름] --delete [원격의 브랜치명] : 원격의 브랜치 삭제
원격 저장소로 push / pull
- git push === git push -u origin main : 원격으로 커밋 밀어올리기
- git push --force : 로컬의 내역 강제 push
- git pull : 원격으로 커밋 당겨오기
pull 할 것이 있을 때 push를 하면?
- pull 을 무조건 먼저해야함, 원격에 먼저 적용된 새버전을 받고나서 push 할 수 있음
push 할 것이 있을 시 pull 하는 두 가지 방법
- git pull --no-rebase - merge 방식
- git pull --rebase- rebase 방식