티스토리 뷰
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
revert
: 되돌렸다는 커밋이 발생된다.
$ git revert 특정시점
$ git log --oneline
520c668 (HEAD -> master) Revert "Add 3 files"
8a97ad4 Add 3 files
4d42f0f Test
f7dc503 First commit
-
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 발생하는 경우도 있음.
- vim 편집기 창이 popup되고, 커밋 메시지를 확정시키고 push
$ 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 |
댓글