매일 사용하면서도 정확하게 안다는 느낌이 없었는데, 마침 스터디 같이 하는 친구가 깃 명령어가 꼬이는 바람에 고생하고 있어서 한번 싹 정리했다. 용어 설명은 간략하게 하고, 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
github/gitignoreThis is GitHub's collection of file templates. We use this list to populate the .gitignore template choosers available in the GitHub.com interface when creating new repositories and files.- 만약 .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
- 아직 마무리하지 않은 작업을 잠시 저장하고, 마지막 커밋으로 되돌아감
💡어떤 작업을 하던 중에 잠시 브랜치를 변경해야 할 때, 아직 완료하지 않은 일을 commit하는 것은 껄끄러우니 stash 해놓고 다른 브랜치 확인 후 돌아와서 stash를 다시 가져와 사용- git stash : stash를 저장
- git stash list : stash list 확인
- git stash apply : stash 가져오기
- git stash drop : stash 삭제
- rebasegit rebase 하는 방법처음 코딩을 배우면서 프로젝트를 할 때는 git merge만 사용했다. 개발자로서 처음으로 다른 개발자와 협업을 하면서 깔끔하게 commit을 관리할 수 있는 rebase 방법을 익히게 되었다. 나처럼 한 번도 git rebase를 써본 적 없는 분들을 위해 내가 지금 쓰고 있는 방법을 풀어써보려고 한다! 만약 feature/test라는 branch를...
- cherry-pick
- 특정 커밋만 가져오는 것
취소
- add
- git reset HEAD
file 이름
: 특정 파일을 unstaged 상태로 변경 (안적으면 add된 파일 모두)- default로 --mixed 옵션으로 실행됨
- git reset HEAD
- commit 💡가급적 Push 전에만 아래의 명령어를 사용하는 것을 권장! 이미 push한 커밋에 대해 이 작업을 수행하면 다른 사람들도 영항을 받음
- 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가 남는 방법⚠️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가 남지 않는 방법⚠️이 방법으로 지우면 원격 저장소에 흔적도 없이 commit을 삭제할 수 있다. 하지만 내 commit을 pull 한 팀원이 있다면, 다음에 그 팀원이 push할 때 내가 지운 commit이 다시 추가될 수 있다! 즉, 1. 나 혼자만 사용하는 브랜치에 커밋을 push하였고, 이를 되돌리고 싶은 경우 2. 팀원들과 직접 커뮤니케이션해서 내가 되돌릴 커밋을 pull한 팀원이 없다고 확인된 경우 사용하자!
- push한 commit 삭제
- git reset 을 사용해 원하는 대로 commit을 삭제
- git push -f
원격 저장소 이름
branch명
- push한 파일 삭제
- 위와 같은 방법으로 commit을 삭제
- push한 commit 삭제
- history가 남는 방법
특정 commit 선택
- HEAD : 현재 브랜치의 가장 마지막 커밋을 가리키는 포인터
- HEAD^ : 가장 최근 커밋
- HEAD~4 : 최근부터 4개
참고
🏕️ 오픈소스 입문을 위한 아주 구체적인 가이드
Table of Contents 작년 겨울부터 오픈소스에 관심이 생겨 이곳저곳에 이슈도 올리고 풀 리퀘스트도 보내고 있다. 오픈소스 기여의 가장 큰 장점은 남의 코드를 많이 읽을 수 있다는 점과 기술 트렌드를 계속 확인할 수 있다는 점이다. 그리고 영작 실력도 미세하게 (...) 향상된 것 같다. 처음 오픈소스 활동을 시작할 때 네이버 오픈소스 가이드 가 큰 도움이 됐다.

Uploaded by Notion2Tistory v1.1.0