매일 사용하면서도 정확하게 안다는 느낌이 없었는데, 마침 스터디 같이 하는 친구가 깃 명령어가 꼬이는 바람에 고생하고 있어서 한번 싹 정리했다. 용어 설명은 간략하게 하고, git 명령어 취소를 중점적으로 정리했다.
Git
깃(Git)은 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템이다. (- 위키백과 -)
어렵게 느껴질 수 있지만 대강의 뜻은 이렇다.
- 분산 : 여러 개발 환경(즉 여러 명의 개발자)에서 한 프로젝트를 협업하며 개발할 수 있음
- 버전 : 개발 단계에 따라 한 프로젝트의 여러 버전을 나누고 관리할 수 있음
아무튼 다시 정리하면, 여러 명의 개발자가 버전 관리를 하며 쉽게 협업할 수 있는 툴!
용어
- Repository: 코드나 문서를 비롯한 리소스를 저장하는 곳을 말하며, 프로젝트 단위로 만든다. 그냥 리포(repo)라고 줄여쓰기도 한다.
- 원격 저장소(Remote repository) : 깃허브같은 호스팅 서비스 서버에 올라가 있는 저장소
- 로컬 저장소(Local repository) : 개인 컴퓨터에 있는 저장소
- Fork: 다른 사람의 원격 저장소를 그대로 복사해 내 계정의 원격 저장소로 만드는 것
- Pull Request: 내 저장소의 변경 내용을 다른 사람의 저장소에 반영하도록 요청하는 것. 풀 리퀘스트를 보내면 해당 저장소의 메인테이너(프로젝트를 관리하는 사람)이 내 작업을 반영할지 말지 결정한다. 풀 리퀘, PR이라고 줄여 말한다.
- Issue: 프로젝트의 버그 리포트, 기능 제안, 질문 등을 말하며, 깃허브 저장소에서 Issues 탭에 들어가면 다양한 토론을 볼 수 있다.
- git에서 관리하는 파일들의 상태
- HEAD : 현재 작업중인 브랜치의 작업중인 커밋을 가리키는 포인터
- 특정 커밋을 가리키게 할 수 있음
- Tag : commit에 이름을 지정해주는 역할
- 주로
v1.0.0
과 같이 버전 정보를 나타낼 때 사용
- 주로
- .gitkeep : git에 빈 폴더만 추가할 수 없기 때문에 폴더 구조를 추가하기 위해 만드는 내용 없는 파일
- .gitignore : git이 무시하도록 하는 설정 파일
- 아래의 링크에서 템플릿을 받아서 사용하자! ex) Android.gitignore
- 만약 .gitignore 파일을 늦게 만들어서, 무시하려는 파일이 이미 tracked 상태라면
- git rm --cached
file 이름
: tracked 된 파일을 untracked 상태로 변경
- git ls-files : tracked 된 파일 리스트 출력
- git rm --cached
명령어
- 초기 세팅
- git을 처음 설치했다면
- git config -- global user.name
user_name
: git 계정 Name 변경하기
- git config -- global user.email
user_email
: git 계정 Mail 변경하기
- git config -- global user.name
- init : 현재 폴더를 git 폴더로 초기화
- clone
github repo 주소
: github repository를 로컬에 다운받고 연결
- remote
- git remote -v : 현재 연결된 깃헙 레포지토리를 확인
- remote add
원격 저장소 이름
github repo 주소
: 현재 폴더와 github repo를 연결- ex) git remote add origin http://somerepo.git
- remote remove
원격 저장소 이름
: 원격 저장소 연결 해제
- git을 처음 설치했다면
- 코드 올리는 과정
- add
file 이름
: 다음 커밋에 이 파일을 추가한다
- commit -m
commit 메세지
: 작업 내역을 저장한다
- push
- pull-request
- add
- 코드 받아오는 과정
- fetch : 가져오기
- merge : 합치기
- pull : fetch + merge
- 브랜치 다루기
- checkout
- git checkout
branch명
: 특정 브랜치로 이동
- git checkout -b
branch명
: 브랜치를 새로 만들고 그 브랜치로 이동
- git checkout -t
원격 저장소 이름
/branch명
: 로컬에는 없지만 원격 저장소에는 있는 브랜치로 이동
- git checkout
- checkout
- rm
file 이름
: 원격 저장소와 로컬 저장소에 있는 파일을 삭제- rm --cached
file 이름
: 원격 저장소에 있는 파일만 삭제
- rm --cached
- stash
- 아직 마무리하지 않은 작업을 잠시 저장하고, 마지막 커밋으로 되돌아감
- git stash : stash를 저장
- git stash list : stash list 확인
- git stash apply : stash 가져오기
- git stash drop : stash 삭제
- rebase
- cherry-pick
- 특정 커밋만 가져오는 것
취소
- add
- git reset HEAD
file 이름
: 특정 파일을 unstaged 상태로 변경 (안적으면 add된 파일 모두)- default로 --mixed 옵션으로 실행됨
- git reset HEAD
- commit
- git commit --amend -m
수정된 commit 메세지
: 마지막 커밋 메세지 수정
- git reset --soft
특정 commit
- -soft 옵션은 작업 디렉토리와 인덱스를 보존하고 헤드만 변경한다 즉, 커밋한 파일들이 add된 상태(staged)로 유지됨
- git reset --mixed
특정 commit
- reset의 기본 옵션으로, 작업 디렉토리는 그대로 유지한 채 헤드와 인덱스를 변경한다 커밋한 파일들이 unstaged 상태로 변경됨
- git reset --hard
특정 commit
- --hard 옵션의 경우 작업 디렉토리와 헤드, 인덱스를 모두 변경한다.
→ 변경 사항을 다 지워버린다는 말!
- reset --hard 로 지워진 커밋을 다시 복구하려면 (commit 취소를 취소)
- git reflog에서 복구하고 싶은 커밋 해시값을 찾음
- git reset --hard
복구하고 싶은 commit
- reset --hard 로 지워진 커밋을 다시 복구하려면 (commit 취소를 취소)
- --hard 옵션의 경우 작업 디렉토리와 헤드, 인덱스를 모두 변경한다.
- git commit --amend -m
- push
- history가 남는 방법
- push한 commit 삭제
- git revert
특정 commit
- git revert HEAD..HEAD~4
- git revert
- 원격 저장소의 파일 삭제
- git rm --cached
file 이름
: 원격 저장소에서 파일 삭제
- 원격 저장소에 반영시키기 (commit → push)
- git rm --cached
- push한 commit 삭제
- history가 남지 않는 방법
- push한 commit 삭제
- git reset 을 사용해 원하는 대로 commit을 삭제
- git push -f
원격 저장소 이름
branch명
- push한 파일 삭제
- 위와 같은 방법으로 commit을 삭제
- push한 commit 삭제
- history가 남는 방법
특정 commit 선택
- HEAD : 현재 브랜치의 가장 마지막 커밋을 가리키는 포인터
- HEAD^ : 가장 최근 커밋
- HEAD~4 : 최근부터 4개
Uploaded by Notion2Tistory v1.1.0