[프로젝트 시작하기 전 봐야하는 git 컨닝노트]
2022. 10. 15. 01:18ㆍStudy/Git
실제로 프로젝트를 진행하며 도움되었던 git 명령어와 제가 사용한 상황에 대해 정리해보려고 합니다.
Git 영역
- Working Directory : 로컬 폴더
- Staging 영역 : 수정된 코드 올리기
- Repository : 원격 저장소
리포지토리 복제하기 git clone
🔔 필요한 상황
- 원격 리포지토리에 로컬 커밋을 올리기 위해 연결해야 할 때
git clone [url]
리포지토리와 로컬 폴더 연결하기 git remote
🔔 필요한 상황
- 원격 리포지토리에 로컬 커밋을 올리기 위해 연결해야 할 때
Github 리포지토리 <url>를 <name> 이름으로 원격 저장소로 등록한다.
git remote add [name] [url]
// 깃허브 주소를 origin이라는 이름으로 다루겠다는 뜻
git add origin https://github.com/dorrion/Ajou-Psychology-Brochure.git
// SSH 주소값으로도 가능하다
git remote add origin git@github.com:dorrion/Ajou-Psychology-Brochure.git
// 연결되었는지 확인하기
git remote // 위에서 연결한 [name]이 나옵니다
git remote -v // 위에서 연결한 [name]과 [url]을 볼 수 있습니다.
로컬 저장소에서 Staging 영역으로 추가하기 git add
// 파일의 상태를 확인합니다
git status
// 로컬 저장소에서 수정된 파일이 모두 스테이징 영역으로 추가됩니다.
git add .
git add -A
// 변경사항을 하나씩 확인하면서 add하거나 제외할 수 있습니다.
git add -p
git status
- 현재 파일의 상태를 알 수 있다.
- 현재 브랜치는 master이다.
- Changes not staged for commit: 이 영역은 아직 워킹 디렉토리에 있는 변경 내용을 보여줍니다.
로컬 저장소에서 변경사항 기록하기 git commit
🔔 필요한 상황
- 변경사항을 저장할 때
- 커밋 컨벤션을 통해 팀 간의 커밋 규칙을 통일 할 수 있음.
git commit -m "커밋 메시지"
로컬 폴더에서 remote 저장소 (리포지토리)에 커밋 올리기 git push
🔔 필요한 상황
- 원격 리포지토리에 로컬 커밋을 올릴 때
git push [name] [branch name]
// origin이라는 이름으로 연결한 리포지토리의 master 브랜치에 커밋을 push합니다
git push origin master
작업을 분리하는 git branch
🔔 필요한 상황
- 각각의 작업을 분리해서 진행할 때
- 저희는 master, release, develop, feat으로 브랜치를 나누었고, 이슈 생성 후 feat/이슈번호-이름으로 각 브랜치를 만들어 작업하였습니다
git branch // 브랜치 목록
git branch <브랜치 이름> // 로컬에서 브랜치 만들기
git checkout <브랜치 이름> // 다른 브랜치로 이동하기
git checkout -b <브랜치 이름> // branch + checkout : 브랜치를 만들고 전환하기
git branch -d <브랜치 이름> // 브랜치 삭제하기
커밋을 되돌리는 git reset
🔔 필요한 상황
- 커밋을 미리 해버렸을 때 : 직전에 푸시한 커밋을 되돌릴 때
git reset은 커밋을 흔적도 없이 제거해버리기 때문에 특히 다른 팀원 충돌 도와줄 때는 익숙하게 알고 있는 git reset HEAD^ 제외하고는 3번 이상 고민하고 찾아보고 썼고, 저는 revert를 주로 사용하였습니다.
git log // 이력을 확인합니다
git reset HEAD^ // 내가 원하는 가장 최근 커밋을 취소하고 스테이지도 취소한다
--soft // 최근 커밋 하기 전
--mixed // 최근 커밋 하기 전 + 스테이징 하기 전(default)
--hard // 최근 커밋 하기 전 + 스테이징 하기 전 + 파일 수정하기 전 => 복구 불가능, 위험
커밋을 되돌리고 이력을 남기는 git revert
🔔 필요한 상황
- 특정 커밋 되돌리면서 되돌린 이력 남기기
git log // 커밋 히스토리 조회
// 다음처럼 나오게 된다. - 출처 : https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%BB%A4%EB%B0%8B-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
// commit 뒤의 값을 hash 값이라고 한다.
// revert 후 자동으로 커밋에 추가하게 되는데, 막고 싶다면 --no-commit 옵션을 붙이면 됩니다
git revert [되돌리고 싶은 commit hash값]
원격 리포지토리의 변경사항을 받아오는 git pull
🔔 필요한 상황
- 원격 리포지토리의 브랜치의 변경사항을 내 로컬 브랜치에 동기화 시킬 때
git pull <remote> <브랜치 이름>
git pull origin develop // 예시
로컬 작업 내용을 저장하는 git stash
🔔 필요한 상황
- 로컬 폴더에서 작업한 내용을 푸시 안한 상태에서 pull을 받고 싶을 때
pull 하기 전에 git stash 한 후, git pull -> git stash pop을 하는 등으로 이용했다.
// 스택에 진행 중인 작업을 쌓아놓는다
git stash
git stash save
// 목록 확인
git stash list
// stash 적용
git stash apply
git stash apply [stash 이름]
// stash 제거
git stash drop
// 적용과 동시에 제거
git stash pop
참고 자료
- git remote https://kotlinworld.com/284
- git add https://www.daleseo.com/git-add/
- git 사용 방법 https://wordbe.tistory.com/entry/Git-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95-%EC%A0%95%EB%A6%ACcommit-push-pull-request-merge-%EB%93%B1
- git 명령어 모음 https://velog.io/@delilah/GitHub-Git-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AA%A8%EC%9D%8C
- git stash https://gmlwjd9405.github.io/2018/05/18/git-stash.html