Git Basic Command
0. GUI vs CLI
GUI(Graphicial User Interface)는 사용자에게 직관적이고 사용자에게 실시간으로 시각적인 피드백을 제공한다.
덕분에 사용자는 개념을 더욱 쉽고 빠르게 익힐 수 있다는 장점이 있다.
그러나 CLI(Command Line Interface)를 통해 학습하는 것이 Git의 더 많은 기능을 더욱 세밀하게 작업할 수 있도록 한다.
1. install Git
Git은 소스코드 및 파일의 변경내역을 저장하는 분산 버전 관리 시스템이자 소프트웨어다.
때문에 Git을 사용하기전 필수적으로 설치를 해주어야 한다.
1-1. Ubuntu환경
아리 명령어를 통해 Git을 설치할 수 있다.
$ sudo apt-get update
$ sudo apt-get install git
1-2. Mac에서 설치하기
Mac에는 기본적으로 Git이 설치되어 있으나 버전에 따라 설치가 안되어 있을수도 있으니 터미널에서 아래의 명령어를 통해 확인해본다.
- git
- git --version
MacBookAir ~ git
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--config-env=<name>=<envvar>] <command> [<args>]
MacBookAir ~ git --version
git version 2.43.0
만약 설치가 안되어있다면 다음과 같은 방법으로 설치할 수 있다.
- https://git-scm.com/ 링크에서 zip파일 다운받아 설치
- homebrew로 git 설치 // $ brew install git
2. Sign up Git
Git을 사용하기 위해 사용자 정보를 설정한다.
만약 이미 본인의 Github 계정이 있다면 그 계정을 사용하도록 한다.
$ git config --global user.name "MyName"
$ git config --global user.email email@example.com
설정이 잘 되었는지 확인하려면 아래 명령어로 확인할 수 있다.
$ git config --list
$ git config --get user.name
$ git config --get user.email
3. Create Repostiory
작업하기 위한 디렉토리를 생성
$ mkdir git-test
현재 디렉토리를 버전관리를 위한 Git Remote Repository로 지정하기
$ cd git-test
$ git init
$ git init 입력 시 해당 폴더 기준으로 .git(로컬 저장소)가 생성된다.
해당 저장소에는 버전 정보, 원격 저장소 주소가 사용된다.
$ ls -al을 통해 확인할 수 있다.
이때 한 폴더에 하나의 로컬 저장소만 지정해 주어야 한다. 그렇지 않을 경우 충돌이 발생한다.
- 디렉토리별 권한은 세 부분으로 나뉘어진다.
- 소유자의 권한, 그룹의 권한, 다른 사용자들의 권한
- 읽기(r), 쓰기(w), 실행(x) 권한을 의미한다.
- 따라서 drwxr-xr-x는 디렉토리이며, 소유자는 읽기, 쓰기, 실행이 가능하고, 그룹과 다른 사용자들은 읽기와 실행이 가능하다는 것을 의미한다.
4. Commit
파일을 생성 touch, 추가 add, 커밋 commit 해본다.
4-1. touch
새 파일을 생성하는 명령어다.
$ touch 1234.txt
$ touch abc.pptx
$ touch test.txt
$ ls -l #디렉토리내 목록을 확인해볼 수 있다.
$ rm test.txt #파일 삭제
$ rm -rf * #숨김 파일을 제외한 모든 파일 삭제
$ touch README.md
$ ls 를 통해 디렉토리 안을 살펴볼 수 있다.
$ rm 을 통해 파일들을 삭제할 수 있다.
4-2. add
변경한 파일 목록 중 스테이지에 올릴 파일만 선택한다.
파일 전체를 올리고 싶다면 git add 뒤에 . 을 입력한다. (git add .).
* add와 . 사이에 반드시 스페이스 한 칸 입력
$ gid add README.md #지정파일 올리기
$ git add . #모든 파일 올리기
4-3. commit
스테이지에 올라온 파일들을 깃(.git)에 올린다.
$ git commit -m "저장 메시지 입력"
$ git commit -m "first commit"
4-4. Git Repository 상태 확인하기 / status, diff, log
status
파일의 상태를 확인한다.
$ git status
파일의 상태에 따라 Untracked와 Tracked로 분류된다.
- Untracked(관리 대상이 아님): 파일 생성 후 한번도 git add 하지 않은 상태
- Tracked(관리 대상임): git이 관리하는 파일임을 의미
- Unmodified: 최근 커밋과 비교하여 바뀐 내용이 없는 상태
- Modified: 최근 커밋과 비교하여 바뀐 내용이 있는 상태
- Staged: 파일이 수정되고나서 스테이지 공간에 올라와 있는 상태이며, git add 후의 상태를 의미
diff
변경사항 확인.
add하기 전 최근 commit한 내용과 현재 폴더의 변경사항을 확인 가능하다.
$ vim README.md #파일내용 수정
#hello Git! 입력
$ git commit README.md
#commit tag에 this file changed입력
$ git diff
log
commit history 조회가 가능하다.
git log 명령어를 통해 최근 커밋 히스토리를 확인할 수 있다.
5. Remote Repository
5-1. Create Remote Repository
git 협업을 위해서는 원격 저장소에 연결해야 하며 보통 GitHub를 많이 사용한다.
$ git remote
#$ git remote add <원격 저장소 이름, 별칭> <원격 저장소 URL>
#URL은 보통 https://github.com/사용자이름/저장소이름.git 형식으로 구성
$ git remote add test https://github.com/NickName/git_test.git
$ git remote add <name> <remote repository URL> 로 연결한다.
$ git remote 명령어를 통해 정해놓은 별칭으로 원격 저장소가 생성되었음이 확인 가능하다.
5-2. PUSH
PUSH를 통해 원격 저장소로 메인브랜치 내용을 저장해보자.
$ git push -u <repository nickname> <branchname>
github.com에서 GUI로 확인해보면 아래와 같이 기존 README.md 파일이 추가된것을 알 수 있다.
5-3. PULL
GitHub GUI가 제공해주는 에디터를 사용해 파일을 수정하고 PULL해보도록 한다.
PULL 명령어는 다음과 같다.
$ git pull <원격 저장소 이름> <브랜치 이름>
$ git pull test master
원격저장소인 'test'의 'master'브랜치에서 변경 사항을 가져와 로컬 저장소의 현재 브랜치에 병합한다.
로그를 통해서도 역시 변경사항이 확인 가능하다.
6. Git Command
- git init: 깃 초기화. 버전관리를 할 경로에서 사용되며 .git 폴더가 생성된다.
- git status: 현재 깃 프로젝트에서 파일들의 상태를 보여준다.
- git add: 생성되거나 변경된 파일을 스테이징 영역(staging area)에 추가한다. 이 영역에 있는 변경 이력만 commit할 수 있다.
- git rm: 파일을 지우거나 스테이지에서 해제한다.
- git restore: 워킹 트리(Working tree)의 변경된 파일을 복원한다.
- git clean: 추적되지 않는 상태(Untracked)의 파일을 삭제한다. 삭제 되면 복구할 수 없으니 'stash'도 고려하는것이 좋다.
- git commit: 스테이징 영역(staging area)에 있는 파일을 저장한다.
- git log: commit 내역을 확인할 수 있다. git log --help 명령어로 사용할 명령어를 조회하여 세부명령이 가능하다.
- git log --graph: branch 그래프를 추가하여 보기
- git log -all: 모든 branch 보기
- git log --oneline: commit메시지 제목만 한줄로 보기
- git show: commit의 상세 정보를 확인한다.
- git reset: 커밋을 취소하거나 staging취소가 가능하다. 옵션에 따라 디테일한 설정이 가능하다.
- git reset --soft: 커밋 취소, 스테이징 상태 유지
- git reset --mixed: 커밋 취소, 스테이징 취소, local은 변경 상태로 유지
- git reseet --hard: 커밋 취소, 스테이징 취소, local변경상태 취소
- HEAD: 위 옵션 3가지 뒤에 사용한다. 최신 커밋을 취소하거나, 설정에 따라 더 취소할 파일 수를 지정 가능하다.
- git branch: branch를 관련 명령어다. 옵션에 따라 생성, 삭제, 조회 등 디테일한 설정이 가능하다.
- git switch: branch를 변경하는 명령어다.
- git fetch: remote repository의 데이터를 가져온다. pull로 병합 전에 어떤 변경점이 있는지 볼 때 유용하다.
- git pull: remote repository의 데이터를 가져온 후 local branch에 병합한다.
- git stash: 현재 작업중인 변경점을 임시 저장하거나 불러올 수 있다. 다른 branch로 가서 작업 전에 확인하기에 유용하다.
- git blame: 특정 파일의 수정 이력을 확인 가능하다. 누가, 언제 마지막으로 수정하였는지 알 수 있다.
- git diff: 소스를 비교하여 볼 수 있다.
- git revert: 지정한 커밋으로 되돌려 커밋한다. 되돌린 이력이 남기에 충돌 발생 위험이 적으며 협업에 유용하다.
- git tag: 특정 커밋에 표기하며 주로 release시 사용한다.
- git merge: 현재 브랜치를 특정 브랜치의 소스와 병합한다. merge전 워킹 디렉토리를 stash등으로 정리하고 진행하는것이 좋다.
이 외에도 다양한 기능이 있으며 숙지하여 개발에 유용하게 사용해보자.