본문 바로가기

개발자 노트/GitHub

Git 기본 명령어와 사용법

Git이란 무엇인가

Git은 컴퓨터 파일의 변경 사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업(협업)을 조율하기 위한 분산 버전 관리 시스템

  • git 창시자 : 리누스 토발즈(Linus Torvalds)

Linus Torvalds

리누스? 리눅스?
이름에서 알 수 있듯이 그는 리눅스의 창시자이기도 하다.
오픈소스계의 영원한 아이돌 리누스 토발즈는 리눅스 커널을 관리하는 기존 툴이 엉망인 것에 너무 빡친 바람에 git이라는 소스관리 툴을 만들었다.
(너무 화나서 단 2주만에 완성했다고 한다...)

많은 양의 코드를 관리하기 위해 SCM(Source Code Management, 코드 관리 도구)을 개발[각주:1]했고,
이는 VCS(Version Control System, 버전 관리 도구)라고도 한다.

  • Version :
    1. 언제든지 과거의 특정 시점으로 돌아갈 수 있음
    2. 매 작업 시점마다 변경 사항을 알 수 있음

--> 즉 git은 버전을 통해 코드를 관리하는 도구이다.

git은 GUI와 CLI를 지원한다.
1. GUI(Graphic User Interface) : (우리가 흔히 아는 윈도우처럼) 그래픽으로 인터렉션 할 수 있음
ex) 소스트리, GitHub Desktop
2. CLI(Command Line Interface) : (윈도우에서 cmd, powershell처럼) 커맨드 명령어로 인터렉션 할 수 있음

Git 설치 후 Git Bash 실행

Git으로 코드 관리를 시작

  • 코드 관리 기준(단위) : 폴더
  • (master) : 현재 브랜치(branch) 명
  • .git/ 폴더 생성 : Git으로 관리되는 폴더

CLI 기본 명령어

CLI 명령어

  • pwd(print working directory) : 현재 작업중인 폴더(디렉토리)
  • ls(list) : 현재 폴더의 내용물을 출력
  • cd(change directory) [폴더명] : 폴더를 변경
    • cd .. : 상위 폴더로 이동
    • cd ~ : 홈 폴더로 이동
    • cd . : 현재 폴더로 이동(. 현재 폴더)
    • cd / : 루트 폴더로 이동(/ 루트 폴더, 최상위 폴더)
    • cd : 홈 폴더(기본값)로 이동
  • mkdir(make directory)[폴더명] : 새로운 폴더 생성
  • rm -r [폴더명] : 폴더 삭제
    • rm -rf / : 루트로부터 모든 폴더/파일 삭제(절대로 위험)
    • -r : recursive(재귀적)
  • touch [파일명] : 새로운 파일 생성
  • rm [파일명] : 파일 삭제
  • cp(copy) [파일명] [위치] : 파일 복사
  • cp -r [폴더명] [위치] : 폴더를 복사
  • mv(move) [파일/폴더명] [바꿀파일/폴더명] : 파일/폴더명 변경
    • mv [파일/폴더명] [위치] : 파일 또는 폴더를 이동

Git 기본 명령어

(1) git status

Git에게 상태를 물어봄 / 현재 상태를 출력

  • git init 직후 :
  • On branch master -> master라는 브랜치 위에 있어요. No commits yet -> 아직 commit이 없어요. nothing to commit (create/copy files and use "git add" to track) -> commit할 것이 없어요.
  • test.txt 파일 생성 후
  • On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) test.txt -> 추적되지 않은 파일이 있어요. (파일명) nothing added to commit but untracked files present (use "git add" to track) -> commit 하기 위해 add된 것이 없어요. 그러나 추적되지 않은 파일은 있어요.
  • git add test.txt한 후 git status
  • On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: test.txt -> commit할 변경들이 있어요. (파일명)

(2) git commit

  • 처음으로 commit 명령어를 실행할 경우
  • Author identity unknown -> 작자 미상 *** Please tell me who you are. -> 당신이 누군지 알려주세요. Run -> 아래의 명령어를 실행해주세요. git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'power@DESKTOP-J2GHRPD.(none)')

(3) git config

configuration/

Git에 관한 설정

  • git config --global user.email "이메일" : 전역(global)으로 user의 email을 설정
    $ git config --global user.email "powerover310@gmail.com"
  • git config --global user.email "이메일" : 전역(global)으로 user의 name을 설정
    $ git config --global user.name "osori"
  • git config 설정 후(vim 에디터 창),
    # Please enter the commit message for your changes. Lines starting
    -> 변경사항에 대한 commit message를 입력해주세요.
    # with '#' will be ignored, and an empty message aborts the commit.
    -> #로 시작하는 라인은 무시합니다. 아무것도 없는 메시지는 종료됩니다.
    #
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    #       new file:   test.txt
    #

(4) git commit -m "commit message"

  • git commit 이후,
  • On branch master nothing to commit, working tree clean -> commit 할 것이 없어요.
  • commit이란 하나의 버전을 만드는 것.
  • 현재 상태의 스냅샷 촬영

(5) git log

현재까지의 commit을 출력

  • git log 출력 화면
  • commit f71358f31d1bc6c37f2aa35da4d8d211fb9513c2 (HEAD -> master) Author: osori <powerover310@gmail.com> -> 작성자 Date: Tue Mar 16 15:55:08 2021 +0900 -> 날짜 first commit -> commit message

(6) 코드 편집기로 코드 편집 실행

$ code .
-> 현재 폴더를 VS Code로 실행
  • 파일 수정 후, git status
  • On branch master Changes not staged for commit: -> commit하기 위해 stage 되지 않은 변경사항이 있어요. (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: test.txt no changes added to commit (use "git add" and/or "git commit -a")
  • $ git add test.txt
  • $ git commit -m "Add title"
  • $ git log --oneline # 한줄로 log 출력ee50f06 (HEAD -> master) Add title
    f71358f first commit

-> 과거버전 검색

$ git checkout f71358f

-> 현재버전으로 돌아오기

$ git checkout master

-> 뭐가 변했는지 물어보기

$ git diff test.txt

(7) git remote

  • git remote add origin [저장소이름] [저장소주소]
    • git에게 원격저장소(remote) 추가를 명령
  • 저장소이름 : origin
  • 브랜치이름 : master
    -> git remote add origin https://github.com/osori310/basic_git
    -> 확인 : git remote
  • git remote -v (verbose)
$ git push origin master

$ git pull origin master # 차이가 있는 부분에 대해서 가져옴

 

(8) git branch

  • 모든 branch 출력

(9) git branch [new branch name]

  • 새로운 branch 생성

(10) git checkout [branch name]

  • branch 이동
  • 새로운 branch(Sandbox)에 Head를 두고 변경한 사항들에 대해서는 master branch에 적용되지 않음

(11) git merge [branch name]

  • 누가 누구를 합병하는가? -> 중요!
  • 주어(Merger) -> 목적어(mergee)
  • ex) master가 test를 병합하는 경우
    1. 주어 branch 'master'로 이동
    2. git merge test

Github TIL

1. TIL?

  • TIL은 Today I Learn의 줄임말로 개발자 사이에서 매일 자신이 학습한 내용을 commit(기록)하는 것
  • github, bitbucket, gitlab과 같은 원격 저장소에서 제공하는 1commit-1grass의 흥미 요소 제공

2. TIL 세팅

(1) Git으로 프로젝트 관리 시작 : git init

  • 자신이 앞으로 학습한 내용을 기록할 TIL 폴더를 하나 생성한다. 이 때 해당 폴더는 최상단에 생성한다.
  • git bash에서 TIL 폴더로 이동한 이후에 아래의 명령어로 git 관리를 시작한다.
    $ git init

(2) Commit을 위한 Staging : git add

  • 현재 코드 상태의 스냅샷을 찍기 위한 파일 선택(== Staging Area에 파일 추가)
    $ git add [파일 이름] # .은 모든 변경 사항을 staging area로 올림

(3) 버전 관리를 위한 스냅샷 저장 : git commit

  • 현재 상태에 대한 스냅샷을 commit하여, 버전 관리를 진행한다.
    $ git commit -m "commit message"

(4) 원격 저장소 정보 추가 : git remote

  • Github 원격(remote) 저장소(repository)를 생성하고 TIL 폴더와 연결한다.
  • 새로운 원격 저장소가 추가될 때만 입력한다.
    $ git remote add origin [gitub 원격 저장소 주소]

(5) 원격 저장소로 코드 git push

  • 최종적으로 Github 원격 저장소에 push 한다.
    $ git push origin master

(6) 그 외 명령어

  • 현재 git의 상태를 조회 git status
    $ git status
  • 버전 관리 이력을 조회
    $ git log
  • git 설정 (user.name & user.email) : 최초 1회 설정
    $ git config --global user.name "osori"
    $ git config --global user.email "powerover310@gmail.com"
  1. README.md

원격(remote) 저장소(repository)에 대한 정보를 기록하는 마크다운 문서. 일반적으로 해당 프로젝트를 사용하기 위한 방법 등을 기재한다.

(1) README.md 파일 생성

  • README.md 파일을 TIL 폴더(최상단)에 생성한다. 이름은 반드시 README.md로 설정한다.
    $ touch README.md

(2) (자신만의) TIL 원칙에 대한 간단한 내용 추가

  • 마크다운 작성법 pdf에서 배우고 실습한 내용을 토대로 README.md 파일을 작성한다.
  • 형식은 자유롭게 작성하되 마크다운 문법(의미론적)을 지켜서 작성한다.

(저장 후 버전 관리) : add, commit, push

  • 작성이 완료되면 아래의 명령어를 통해 commit 이력을 남기고 원격 저장소로 push한다.
    $ git add README.md
    $ git commit -m "add README.md"
    $ git push origin master
  1. 추가 학습 내용 관리

(1) 추가 내용 관리

  • TIL 폴더 내에서 학습을 원하는 내용의 폴더를 생성하고 파일들을 생성한 후 작업을 진행한다.
    $ mkdir python

(2) 변경 사항을 저장하고, 원격 저장소로 옮긴다.

  • 업데이트가 완료되면 아래의 명령어를 통해 commit 이력을 남기고 원격 저장소로 push한다.
    $ git add .
    $ git commit -m "학습 내용 추가"
    $ git push origin master

끝으로

Git이란?

코드 관리 도구
코드 협업 도구
코드 배포 도구

  1. git홈페이지에 들어가면 git-scm.com을 확인할 수 있다. [본문으로]