[Git] 기초
Git
소스 코드 변경사항을 효율적으로 관리하기 위해 개발된 ‘분산형 버전 관리 시스템 도구’이다.
Git을 사용하는 이유
버전 관리라는것 자체가 각 버전별로 변경된 이력들을 저장하고 관리하는 작업을 말한다. 다시 이전버전으로 돌아가야 하는 상황이 발생했을 때 이전 버 전이 기록되어 있으니 되돌아가는것이 용이하다. 변경사항을 저장할 때는 변경된 사항을 꼭 작성해야하는데, 누가 어떤 파일을 추가, 수정, 삭제했는지 확인이 가능하다.
협업할때도 Git으로 관리되는 파일은 Github, GitLab, Bitbucket 등의 여러 가지 원격 저장소를 이용해서 백업과 협업을 할 수 있다.
용어 정리
- commit
: 깃에 데이터가 저장되어 온 기록(파일 추가, 변경 등)을 남기는 행위
변경한 시간 순서대로 저장
영문과 숫자로 이루어진 40자리 이름으로 각 커밋 구분
- repository
: 저장소
2-1) Remote Repository (원격저장소)
: 원격 저장소 서버에서 관리 (for 협업)
2-2) Local Repository (로컬저장소)
: 개인 컴퓨터 서버에 저장 (for 개인)
- Head
: 현재 커밋한 소스코드
- Branch
: 코드를 여러개로 복사한 후, 이전의 코드와는 독립적으로 개발하는 것
- Push
: 로컬 저장소의 수정사항을 원격 저장소에 업로드 하는 행위
- Pull
: 원격 저장소에서 로컬 저장소로 다운로드 하는 행위
- Work Tree
: 폴더
- Index
: 커밋을 실행하기 전의 저장소와 작업 트리에 존재하는 공간으로, 모든 변경사항이 포함된 파일들의 집합.
인덱스에 존재하는 파일 중 선택적으로 commit
Git 명령어
분류 | 명령어 | 내용 설명 |
---|---|---|
<새로운 저장소="" 생성="">새로운> | $ git init | .git 하위 디렉토리 생성 (폴더를 만든 후, 그 안에서 명령 실행 => 새로운 git저장소 생성) |
<저장소 복제/다운로드(clone)> | $ git clone https:.. URL | 기존 소스 코드 다운로드/복제 |
$ git clone /로컬/저장소/경로 | 로컬 저장소 복제 | |
$ git clone 사용자명@호스트:/원격/저장소/경로 | 원격 서버 저장소 복제 | |
<추가 및 확정(commit)> | **$ git add <파일명>** **$ git add \***파일명> | 커밋에 단일 파일의 변경 사항을 포함 (인덱스에 추가된 상태) |
$ git add -A | 커밋에 파일의 변경 사항을 한번에 모두 포함 | |
$ git commit -m “커밋 메시지” | 커밋 생성 (실제 변경사항 확정) | |
$ git status | 파일 상태 확인 | |
$ git reset HEAD^ | 이전 커밋 내용으로 수정 | |
**$ git restore <파일명>**파일명> | 커밋 혹은 staged 되지 않은 변경 사항 폐기 | |
<가지(branch)치기 작업> | $ git branch | 브랜치 목록 |
**$ git branch <브랜치이름>**브랜치이름> | 새 브랜치 생성 (local로 만듦) | |
**$ git checkout -b <브랜치이름>**브랜치이름> | 브랜치 생성 & 이동 | |
$ git checkout master | master branch로 되돌아 옴 | |
**$ git branch -d <브랜치이름>**브랜치이름> | 브랜치 삭제 | |
**$ git push origin <브랜치이름>**브랜치이름> | 만든 브랜치를 원격 서버에 전송 | |
**$ git push -u < remote > <브랜치이름>**브랜치이름> | 새 브랜치를 원격 저장소로 push | |
**$ git pull < remote > <브랜치이름>**브랜치이름> | 원격에 저장된 git 프로젝트의 현재 상태를 다운받고 + 현재 위치한 브랜치로 병합 | |
<변경 사항 발행(push)> | $ git push origin master | 변경사항 원격 서버에 업로드 |
**$ git push < remote > <브랜치이름>**브랜치이름> | 커밋을 원격 서버에 업로드 | |
**$ git push -u < remote > <브랜치이름>**브랜치이름> | 커밋을 원격 서버에 업로드 | |
**$ git remote add origin <등록된 원격="" 서버="" 주소="">**등록된> | 클라우드 주소 등록 및 발행 (git에게 새로운 원격 서버 주소 알림) | |
**$ git remote remove <등록된 클라우드="" 주소="">**등록된> | 클라우드 주소 삭제 | |
<갱신 및 병합(merge)> | $ git pull | 원격 저장소의 변경 내용이 현재 디렉토리에 가져와지고(fetch) 병합(merge)됨 |
**$ git merge <다른 브랜치이름="">**다른> | 현재 브랜치에 다른 브랜치의 수정사항 병합 | |
**$ git add <파일명>**파일명> | 각 파일을 병합할 수 있음 | |
**$ git diff <브랜치이름><다른 브랜치이름="">**다른>브랜치이름> | 변경 내용 merge 전에 바뀐 내용을 비교할 수 있음 | |
<태그tag 작업="">태그tag> | $ git log | 현재 위치한 브랜치 커밋 내용 확인 및 식별자 부여됨 |
<로컬 변경사항="" return="" 작업="">로컬> | **$ git checkout – <파일명>**파일명> | 로컬의 변경 사항을 변경 전으로 되돌림 |
$ git fetch origin | 원격에 저장된 git프로젝트의 현 상태를 다운로드 | |
이 놈분께서 리눅스와 깃의 개발자 리누스 토르발즈님 되시겠다. 그냥 면상 얼굴이 보고싶어서 넣어봤다.
캬아아악 퉷