Do it! git & github를 보고 정리한 git 기본
git init
디렉토리에 저장소를 만들기 위해 디렉토리를 초기화한다.
.git이 생기며, 이 디렉토리가 깃을 사용하며 버전이 저장될 저장소(repository)이다.
해당 디렉토리는 감춰져있는데, 맥에서는 shift + command + .
를 누르면 숨은 파일을 확인할 수 있다.
깃에서 버전이란, 문서를 수정하고 저장할 때 생기는 것이다. 깃에서 버전을 관리하면 기존 파일 이름은 그대로 유지하며, 파일에서 무엇을 변경했는지 변경 시점마다 저장할 수 있다!
작업 트리에서 문서를 수정하고 - 수정한 파일 중 버전으로 만들고 싶은 것을 스테이지에 저장 - 스테이지에 있던 파일을 저장소로 커밋하는 것이 깃이 버전을 만드는 순서이다
git status
깃의 상태를 확인하는 명령어
한 번이라도 커밋한 파일은 수정 여부를 계속 추적한다 (tracked 파일)
한 번도 깃에서 버전 관리를 하지 않은 파일은 untracked 파일이라고 표시한다.
git add
작업 트리에서 파일을 만들거나 수정 후 스테이지에 수정한 파일을 추가한다.
git commit -m "메시지 내용"
커밋할 때는 그 버전에 어떤 변경사항이 있는지 확인하기 위해 메시지를 함께 기록한다.
git log
저장소에 저장된 버전을 확인할때 사용 커밋을 만든 사람과 시간이 함께 나타난다.
commit 항목 옆, 영문과 숫자로 된 긴 문자열을 commit hash / git hash라고 부른다. 커밋을 구별하는 아이디라고 볼 수 있으며, commit hash 옆 (HEAD → master)은 이 버전이 가장 최신이라는 표시이다.
git log —-stat
가장 최근의 커밋부터 순서대로 커밋 메시지와 관련 파일이 나열된다. Enter
입력 시 다음 로그 화면을 볼 수 있고 Q
를 누르면 로그 화면을 빠져나올 수 있다.
git commit --am
git add와 commit을 한 번에 처리할 수 있는 명령어
git commit --amend
커밋을 만든 즉시 커밋 메시지를 수정할 수 있다. 가장 최근의 커밋 메시지를 수정할때 사용
git diff
작업 트리에서 수정한 파일과, 최신 커밋 버전을 비교할 수 있다. 수정한 내용으로 새 버전을 만드려면 스테이지에 올린 후 커밋하고 수정한 내용을 버리려면 git checkout 명령어를 사용해 수정 내용을 취소한다.
git checkout -- 파일이름
가장 최신 버전 상태로 되돌려야할 때 사용한다. checkout으로 되돌린 내용은 다시 복구할 수 없음
스테이지에 올라가있지 않을 때, (git add 전) 작업 트리의 변경 사항을 취소할때 사용
git reset HEAD -- 파일이름
스테이지 한 후, (git add 후) 스테이지에서 내릴때 사용한다. 파일이 스테이지에 올라가기 전으로 돌아온다.
git reset HEAD^
수정한 파일을 스테이징하고 커밋까지 한 후, 마지막에 한 커밋을 취소하는 방법이다. 커밋도 취소되고, 스테이지에서도 내려간다. 취소한 파일이 작업 트리에만 남는다.
git reset HEAD~3
최근 3개의 커밋을 취소할 때 사용한다.
git reset --hard 복사한 커밋 해시
복사한 commit hash 위치로 HEAD가 옮겨진다. 복사해서 붙인 커밋이 가장 최신 커밋이 된다.
git revert 복사한 최신 커밋 해시
커밋을 삭제하지 않고 되돌릴 때 사용한다. reset의 경우, reset 명령 뒤 돌아갈 커밋 해시를 지정하지만 revert의 경우 취소하려고 하는 버전을 지정한다.
모든 버전 관리 시스템에는 브랜치라는 개념이 있는데,
나무가 가지에서 새 줄기를 뻗듯 여러 갈래로 퍼지는 데이터 흐름을 가리킨다.
깃으로 버전관리를 시작하면 기본적으로 master
이란 브랜치가 만들어진다.
사용자가 커밋할 때마다 master 브랜치는 최신 커밋을 가리킨다.
새 브랜치를 만들면, 기존에 저장한 파일을 master에 그대로 유지하면서 기존 파일 내용을 수정하거나 새로운 기능을 구현할 파일을 만들 수 있다. 그 후, 새 브랜치에서 원하는 작업을 다 끝내면 새 브랜치에 있던 파일을 원래 master 브랜치에 병합(merge)할 수 있다.
HEAD
는 여러 브랜치 중 현재 작업중인 브랜치를 가리킨다.
git brach
git branch는 branch를 확인하는 명령어이다. master
은 저장소를 만들 때 기본적으로 만들어지는 브랜치!
git branch 브랜치명
브랜치를 만드는 명령어
git checkout 브랜치명
브랜치명에 해당하는 브랜치로 이동한다. 브랜치가 분기 후 다른 브랜치에 추가된 커밋은 해당 브랜치에 영향을 미치지 않는다. 만약 원격저장소에서 새 브랜치가 추가되었을 경우 git remote update
를 통해 새 브랜치 정보를 받아올 수 있다. 이 이후 git branch -r
로 원격 브랜치 조회 한 후 checkout 하면 된다.
git log --online --branches
--online
은 로그를 한 줄씩 보여주는 명령어이다. --branches
를 사용하면 각 브랜치의 커밋을 함께 보로 수 있다. 어떤 브랜치에서 만든 커밋인지 구별할 수 있는 것!
git log --online --branches --graph
브랜치와 커밋의 관계를 좀 더 보기 쉽게 그래프 형태로 표시할 때 사용한다.
git log 브랜치명..브랜치명2
브랜치 사이의 차이점을 알 수 있다. 왼쪽 브랜치를 기준으로 오른쪽 브랜치와 비교한다.
git merge 브랜치명
다른 브랜치에서 작업을 하고 브랜치를 병합할 수 있다! 이 작업을 실행한 브랜치에서 작성한 브랜치명이 합쳐진다. git log --online --branches --graph
로 브랜치와 커밋들이 어떻게 병합되었는지 확인할 수 있다.
다른 파일을 수정하거나, 같은 파일 내에서 다른 위치를 수정할 때는 큰 문제가 없다! 하지만 같은 문서의 같은 위치를 수정했을 때는 충돌이 발생한다. 이 충돌 부분은 사용자가 직접 충돌을 해결해야한다.
git branch -d 브랜치명
병합이 끝난 후, 더 이상 사용하지 않는 브랜치는 깃에서 삭제할 수 있다.
git reset 커밋 해시
현재 브랜치가 가리키는 커밋을 여러 브랜치 사이로 넘나들며 제어할 수 있다. 이 부분이 조금 어려운 것 같음 git checkout
은 HEAD를 제어해 브랜치를 이동할 수 있고, git reset
을 사용하면 HEAD가 가리키고 있는 브랜치의 최신 커밋을 원하는 커밋으로 지정할 수 있다.
git stash
브랜치에서 파일을 수정하고 커밋하지 않은 상태에서 다른 파일을 커밋해야할 경우 사용한다. 아직 커밋하지 않고 작업중인 파일을 잠시 감춰둘 수 있다.
git stash pop
stash 목록에서 가장 최근 항목을 되돌린다.
원격 저장소에 연결해서 버전 관리하는 파일들을 백업한다.
원격 저장소에 지역 저장소를 백업 + 협업 프로젝트에 사용! 또, 개발 이력을 남길 수 있다. 나도 나름대로 아는 부분이니까 간단하게 정리!
git remote -v
원격 저장소에 제대로 연결 되어있는지 확인할 수 있다
git push -u origin master
원격 저장소에 파일 올릴때 git push
를 사용하는데, 가장 처음 푸시할때는 -u origin master을 붙여 사용하는 것이 좋다. 해당 파일은 원격 저장소에서 바로바로 볼 수 있다.
git pull origin master
원격 저장소에서 파일을 내려받을 때 사용할 수 있다.
ssh-keygen
SSH 원격 접속이란, 보안이 강화된 안전한 방법으로 정보를 교환하는 방식이다. SSH에서는 프라이빗 키와 퍼블릭키를 한 쌍으로 묶어 컴퓨터를 인증한다. ssh-keygen
을 입력하면 화면에 SSH 키가 저장되는 디렉토리 경로가 표시되며, 파일 이름을 입력하라고 한다. Enter
을 누르면 SSH를 통해 다른 컴퓨터에 접속할 수 있는 비밀번호가 생성된다. id_rsa
파일이 프라이빗키, id_rsa.pub
파일이 퍼블릭키이다.
이 키를 깃허브에 전송해 저장소에 접속할 수 있다.
git clone
원격 저장소를 기존에 연결된 지역저장소 외 다른 지역 저장소에서 사용하려면 원격 저장소에 담긴 내용을 지역 저장소로 가져와야한다. cloning을 통해 지역 저장소로 가지고 온다. 이렇게 원격 저장소를 복제하면 자동으로 지역 저장소와 원격 저장소가 연결된다. git remote -v
를 통해 확인할 수 있다. A 컴퓨터에서 push한 파일을 B 컴퓨터에서 pull 받아서 작업할 수 있다.
git fetch
원격 브랜치 정보를 가져올 때 사용한다. git pull이 원격 저장소의 커밋을 가져와 지역 저장소와 합친다면 fetch는 원격 브랜치에 어떤 변화가 있는지 그 정보를 가지고 온다.