Git

Git Basic Command

Aburger 2024. 5. 2. 00:49

0. GUI vs CLI

GitHub for Desktop

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

 

 

파일의 상태에 따라 UntrackedTracked로 분류된다.

  • 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등으로 정리하고 진행하는것이 좋다.

이 외에도 다양한 기능이 있으며 숙지하여 개발에 유용하게 사용해보자.

반응형