티스토리 뷰

Git 기초

(20200821~22)

Git은 분산형 저장 관리 시스템 (DVCS)이다.

  • CVSC (Centeralized Version Control System) : subversion
  • DVCS (Distributed Version Control System) : Git (무료)
  • Git을 윈도우에서 활용하기 이해서는 git_bash를 설치해야 한다.
  • Git은 Version Control System 자체고
  • GitHub는 Remote Repository에 저장하기 위한 프로그램

0. 전체 도식

1. 저장소 초기화

$ git init 
Initialized empty Git repository in C:/Users/i/Desktop/TIL/.git/

(master) $
  • 로컬 저장소를 만들고 나면, .git/ 폴더가 생성되고, bash에 (master)라고 표기 된다.
  • 반드시 저장소를 만들기 전에 원하는 디렉토리인지 확인하는 습관을 가지고, 저장소 내부에 저장소를 만들지는 말자.
    • 예) Desktop -> git 저장소, TLS -> 다른 git 저장소 (X)
# 사용자 `user.name`, `user.email`환경변수 설정
$ git config --global user.name "username"
$ git config --global user.email "mail@gmail.com"

# 확인
$ git config --list

2. add

작업한 내용을 커밋 대상 목록에 추가한다.

$ git add .                    # 현재 디렉토리 (하위 디렉토리 포함)
$ git add a.html            # 특정 파일
$ git add b.html c.html        # 특정 다수 파일
$ git add blog/                # 특정 폴더
# 작업 후 상태
$ git status
On branch master

No commits yet

# Untracked files => Git으로 관리된 적 없는 파일
Untracked files:
# Commit 될 것들에 포함시키기 위해서는 add 명령어를 써라
  (use "git add <file>..." to include in what will be committed)
        200820_git.md
        200820_markdown.md
        markdown-images/

# 총평
# 커밋될 곳에 없다. (nothing)
# 하지만, 새로 생성한 파일 (Untracked files)은 존재한다.
nothing added to commit but untracked files present (use "git add" to track)
$ git add .
# add 명령어 후 상태
$ git status
On branch master

No commits yet

# 커밋 될 변경 사항들
# working directory X
# Staging area O
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        200820_git.md
        200820_markdown.md
        markdown-images/

3. commit

$ git commit -m 'Add 200820_markdown.md'

[master (root-commit) b1f7f40] Add 200820_markdown.md
 4 files changed, 192 insertions(+)
 create mode 100644 200820_git.md
 create mode 100644 200820_markdown.md
 create mode 100644 markdown-images/images (1).jpg
 create mode 100644 "markdown-images/\354\272\241\354\262\230.JPG"

커밋은 버전(이력)을 기록하는 명령어이다.

  • 커밋 메시지는 해당하는 이력을 나타낼 수 있도록 작성해야 한다.

  • 커밋 이력을 확인하기 위해서는 아래의 명령어를 사용한다.

    $ git log
    # 해쉬로 표현된 commit 값이 같아야 같은 commit이며, 해쉬이기 때문에 충돌되지 않는 다.
    commit b1f7f40516a48cef5e4781a554fbdeede30943c4  (HEAD -> master)
    Author: username <email@gmail.com>
    Date:   Thu Aug 20 14:59:28 2020 +0900
    
       Add 200820_markdown.md
    
    $ git log -1
    commit b1f7f40516a48cef5e4781a554fbdeede30943c4 (HEAD -> master)
    Author: username <mail@gmail.com>
    Date:   Thu Aug 20 14:59:28 2020 +0900
    
       Add 200820_markdown.md
    
    $ git log --oneline
    b1f7f40 (HEAD -> master) Add 200820_markdown.md
    
    $ git log --oneline -1
$ git status
On branch master
# WD x
# Staging area X

nothing to commit, working tree clean

4. 기타 명령어

1) resotre

작업 공간에서의 변경 사항을 버린다.

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  # 힌트!
  (use "git restore <file>..." to discard changes in working directory)
        modified:   CLI.txt

no changes added to commit (use "git add" and/or "git commit")
$ git restore CLI.txt
  • --staged 옵션을 활용하면, staging area를 취소
    • add명령어의 반대
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   CLI.txt
$ git restore --staged CLI.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   CLI.txt

no changes added to commit (use "git add" and/or "git commit -a")

2) commit 메시지 변경

$ git commit --amend
  • vim 편집기가 실행된다.
  • i : 편집모드
  • esc +wq : 저장하고 종료
  • 주의!! 공개된 커밋은 절대 변경 금지.
    • 협업 시에 push를 한 상태에서 commit을 취소하면 서로 다른 이력으로 취급되어서 충돌난다.
$ git log --oneline
00a6259 (HEAD -> master) TEest
f7dc503 First commit

$ git commit --amend
[master 4d42f0f] Test
 Date: Fri Aug 21 16:17:42 2020 +0900
 1 file changed, 1 insertion(+)

$ git log --oneline
4d42f0f (HEAD -> master) Test
f7dc503 First commit
  • commit 시 특정 파일을 빠트린 경우, 아래와 같이 활용할 수 있다.
$ git add omit.html
$ git commit --amend

3) reset vs revert

  1. revert : 되돌렸다는 커밋이 발생된다.
$ git revert 특정시점
$ git log --oneline
520c668 (HEAD -> master) Revert "Add 3 files"
8a97ad4 Add 3 files
4d42f0f Test
f7dc503 First commit 
  1. reset : 커밋 자체를 지운다.

    • 원격 저장소에 공개된 이력의 경우 주의!!

      $ git reset 특정시점
      $ git log --oneline
      4d42f0f (HEAD -> master) Test
      f7dc503 First commit
    • --mixed : 기본 설정

      • 해당 커밋 이후 변경 사항을 staging area에 보관
    • -- hard

      • 해당 커밋 이후 변경사항을 모두 삭제
    • --soft

      • 해당 커밋 이후 변경사항 및 working directory 내용 보관

Git 원격 저장소 활용

Git 원격 저장소 기능을 제공 해주는 서비스는 gitlab , bitbucket, github 등이 있다.

0. 원격 저장소 설정

$ git remote add origin {url}
  • git, 원격저장소를 추가(add)하고 origin 이라는 이름으로 url 으로 설정

  • 설정된 저장소를 확인하기 위해서는 아래의 명령어를 사용한다.

$ git remote -v
origin  https://github.com/url (fetch)
origin  https://github.com/url (push)

1. 원격 저장소 복제

$ git clone {url}
  • 해당 명령어를 입력한 위치에 원격저장소 이름으로 폴더가 생기며, 저장소가 복제 된다.

2. push

$ git push origin master
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 8 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (13/13), 40.38 KiB | 13.46 MiB/s, done.
Total 13 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/url
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
  • 원격저장소(origin) 의 mater 브랜치로 기록된 커밋(버전)이 업데이트된다.

3. pull

$ git pull origin master
  • 원격저장소(origin)의 master 브랜치의 기록된 커밋(버전)이 현재 로컬 저장소로 받아온다.

원격 저장소 활용시 주의 사항

학원 - 집에서 TIL 혹은 프로젝트 등을 하는 경우 push가 안되는 경우가 있다.

$ git push origin master
To https://github.com/edutak/blog.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/username/blog.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
# 원격 저장소의 변경사항을 통합하여 다시 push
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  • 해결 방법

    • vim 편집기 창이 popup되고, 커밋 메시지를 확정시키고 push
      • conflict 발생하는 경우도 있음.
$ git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), 314 bytes | 34.00 KiB/s, done.
From https://github.com/username/blog
 * branch            master     -> FETCH_HEAD
   6606dd1..eeacd2a  master     -> origin/master
Merge made by the 'recursive' strategy.
 README.md | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

$ git log --oneline
72204b0 (HEAD -> master) Merge branch 'master' of https://github.com/username/blog into master
c16f12a 수업수업
eeacd2a (origin/master) 집 복습
6606dd1 수업끝~
a1532ba 집에서 복습!!

'Tools & 개발환경' 카테고리의 다른 글

이클립스 테마 수정  (0) 2021.03.02
Git 설치하고 PyCharm, WebStorm 연동하기  (0) 2021.01.05
파이썬과 가상환경  (0) 2020.11.12
Git02 - Branch 병합 이용 방법  (0) 2020.08.22
간단한 Markdown 문법  (0) 2020.08.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함