tegongkang@gmail.com
모두의 깃 & 깃허브 - 인프런 | 강의 (inflearn.com)

1. 이론
1) 깃이 없으면?
- 변경 내역 확인이 어렵다
- 작업을 되돌리기 어렵다
- 협력하기 어렵다
2) 깃과 깃허브?
깃?
버전을 관리하기 위한 도구
버전?
유의미한 변화(commit)가 결과물로 나온 것
프로그램 개발 = 유의미한 변화를 쌓아 프로그램을 만들어나가는 것
소스트리?
그런 깃을 편하게 쓸 수 있게 하는 도구
깃허브?
원격 저장소 호스팅 서비스
원격(인터넷 상에서)
저장소(깃으로 관리한 프로젝트)
호스팅(관리해주는)
서비스
3) 깃이 관리하는 세 개의 공간
- 작업 디렉터리: 버전 관리의 대상이 위치하는 공간(.git이 있는 디렉터리)
- 스테이지: 다음 버전이 될 후보가 올라가는 공간
- 저장소: : 버전이 만들어지고 관리되는 공간
- (스테이지와 저장소 git의 가상의 공간)
4) 하나의 버전이 만들어지는 과정
① 작업 디렉터리 내에서 변경사항 발생
② 스테이지로 add
( 다음 버전으로 만들고 싶은 후보들을 추가하기)
③ 저장소로 commit
( stage에 올라와있는 버전으로 만들고 싶은 변경사항들을 저장소에 새로운 버전으로 만들기)
5) 사용자에게 선보이기까지
ㆍ commit hash
: 각각의 커밋들을 지칭할 수 있는 고유의 정보
- 버전마다 다른 문자열을 가지고 있음
- 앞부분만 따서 짧은 commit hash로 사용 가능
ㆍ tag
특정 커밋을 조금 더 가독성 있게 지칭할 때 사용(꼬리표)
여러 개의 커밋 중 유의미한, 분기점이 되는 커밋
ex) v1.0.0
6) 버전 비교하기
- 직전 버전과의 비교
- 특정 커밋끼리 비교
7) 버전 되돌리기
만들어진 버전을 되돌리는 방법
ㆍ revert
: 버전을 되돌린 새로운 버전 만들기
- 이전 버전들 유지한 채로 새로운 버전을 만들고 싶을 때 사용
ㆍ reset
: 버전을 완전히 되돌리기
- 시간을 되돌리듯 되돌리고 싶을 때 사용
( 세 가지 종류)
① soft reset: 저장소로 커밋했다는 사실만 리셋
② mixed reset: 스테이지로 추가했다는 사실까지 리셋
③ hard reset: 변경사항을 생성했다는 사실까지 완전히 리셋
명령어 정리
clear | 명령어 창 비우기 | |
ls | 현재 디렉터리의 파일 및 폴더 보기 | |
ls -a | 숨김 폴더까지 확인 | |
cd <디렉터리 이름> | 현재 디렉터리 변경 | |
cd .. | 상위 디렉터리로 이동 | |
cd . | 현재 디렉터리로 이동 | |
echo <echo할 대상> | 대상 그대로 출력 | |
touch <파일이름> | 파일이름을 가진 비어있는 파일을 만들어라 | |
mkdir <폴더이름> | 폴더이름을 가진 빈 폴더를 생성해라 | |
pwd | 현재 경로 출력 | |
cat? | ||
git status | 현재 작업 디렉터리 상태 확인하기 | |
2. 실습하기
1) 하나의 버전 만들기
Windows의 경우에는 바탕화면에 마우스 오른쪽 클릭 > git bash here 라는 버튼도 있음
git init | 로컬 저장소 만들기 | |
git status | 작업 디렉터리 상태 확인하기 | |
git add | git add <스테이지에 추가할 대상> | <스테이지에 추가할 대상> 스테이지에 올리기 |
git add . | 모든 변경사항 스테이지에 올리기 | |
git commit | git commit | 자세한 커밋 메시지와 함께 커밋하기 => vi 편집기가 나옴 |
git commit --message '<커밋 메시지>' git commit -m '<커밋 메시지>' |
<커밋 메시지>로써 커밋하기 |
💡 git commit 시 vi 편집기 사용하는 방법
git commit 입력하면 vi 편집기 나옴
커밋 메시지와 함께 커밋하기
=> 이 버전은 어떤 변경사항을 담고 있는 것인지 메모 남기기(제목과 본문으로 이루어짐)
커밋 메시지 제목
(한 줄 띄우고)
커밋 메시지 본문(생략 가능)
git commit -m "test.txt생성"
간단하게 제목만 쓰고 싶으면
저장하고 닫으면 버전 만들어져 :wd
vi <파일이름> 편집기를 열어라
어떤 내용을 입력하고 싶다면 입력 모드로 전환해야 함
입력 모드로 전환: a 혹은 i입력모드 빠져나오기 : ESC
저장하기 : 입력모드를 빠져나오고, :w
vi 편집기 닫기: (입력모드를 빠져나오고) :q
현재 입력한 내용 저장하고 닫기: (:w + :q) :wq
rm <파일이름> : 파일을 지워라
rm -rf <폴더이름> : 폴더(안에 있는 파일까지)를 지워라
한 칸 띄고 저장하는 것이 관례
55@DESKTOP-B4EABDM MINGW64 ~/desktop
$ mkdir gittest #gittest 폴더 만들기
55@DESKTOP-B4EABDM MINGW64 ~/desktop
$ cd gittest #해당 폴더로 이동
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest
$ git init #로컬 저장소 만들기
Initialized empty Git repository in C:/Users/55/Desktop/gittest/.git/
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ ls -a #숨김폴더 확인
./ ../ .git/
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ pwd #현재 경로 출력
/c/Users/55/desktop/gittest
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ touch a.txt #새로운 파일 생성
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ ls #현재 디렉터리의 폴더 및 파일 확인
a.txt
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ git status #작업 디렉터리 상태 확인하기
On branch master
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ git add a.txt #스테이지에 올리기
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ git commit #vi 편집기에서 커밋 메시지와 함께 커밋하기(메시지 제목과 본문 작성 후 저장하고 나가기)
[master (root-commit) 58bcec0] a.txt 생성
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
2) 커밋 목록 확인하기
git log | git log | 커밋 목록 조회하기 |
git log --oneline | 커밋 목록 한 줄로 조회하기 | |
git log --patch git log -p |
커밋별 변경사항 목록 조회하기 | |
git log --branches | 모든 브랜치의 커밋 목록 조회하기 | |
git log --graph | 커밋 목록 그래프로 조회하기 |
git log
946398b9d2fb8198d7667c99c1ba346811a1c5fe
커밋해시
커밋을 특정 지을 수 있는 id
한 칸 띄고 저장하는 것이 관례

한 줄로 볼 수 있는 방법
git log --oneline
짧은 커밋 해시(앞부분만 떼서 부름)

git log -p
어떤 변경사항을 담고 있는지 확인

비교하기
3) 비교하기

git diff 스테이지로 올라가면 뜨지 않아
git diff -staged
최근 커밋과 스테이지 비교
저장소에 commit 되어있는 커밋끼리 비교
git diff <1> <2>
1에 비해 2가 어떻게 달라졌는지
순서 헷갈리면 안돼
짧은 커밋해시로도 비교 가능
커밋 메시지 최대한 자세하게 작성하는 게 좋아
55@DESKTOP-B4EABDM MINGW64 ~/desktop/selfgit (master)
$ ls
a.txt b.txt c.txt
55@DESKTOP-B4EABDM MINGW64 ~/desktop/selfgit (master)
$ vi a.txt
55@DESKTOP-B4EABDM MINGW64 ~/desktop/selfgit (master)
$ vi b.txt
55@DESKTOP-B4EABDM MINGW64 ~/desktop/selfgit (master)
$ git diff
warning: in the working copy of 'a.txt', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'b.txt', LF will be replaced by CRLF the next time Git touches it
diff --git a/a.txt b/a.txt
index e69de29..442406a 100644
--- a/a.txt
+++ b/a.txt
@@ -0,0 +1,2 @@
+a
+
diff --git a/b.txt b/b.txt
index 9a80a22..139597f 100644
--- a/b.txt
+++ b/b.txt
@@ -1,2 +1,2 @@
-hello
+
55@DESKTOP-B4EABDM MINGW64 ~/desktop/selfgit (master)
$ 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: a.txt
modified: b.txt
no changes added to commit (use "git add" and/or "git commit -a")
4) 리셋
리셋 명령어

작업 임시 저장하기


3. 브랜치
1) 브랜치를 사용하는 이유?
브랜치가 없다면?




각각의 브랜치는 영향을x
MASTER 브랜치(main이라고도 함)
가장 기본적인 최초의 브랜치
HEAD
현재 작업 중인 브랜치의 최신 커밋을 가리킨다
내가 지금 어디에서 작업 중인가
체크아웃
특정 브랜치에서 작업할 수 있도록 환경을 바꾸는 것
HEAD의 위치를 특정 브랜치의 최신 커밋으로 옮김
(*로 현재 체크아웃된 브랜치 가리킴)
git branch 브랜치 목록 조회
git branch foo
git checkout foo
touch b.txt
git add b.txt
git commit -m "add b in foo"

브랜치를 삭제할 때는 삭제하고자 하는 브랜치에서 체크아웃되어있지 않은 상태여야 합니다
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ git branch
* master
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ git branch foo
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ git branch
foo
* master
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (master)
$ git checkout foo
Switched to branch 'foo'
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (foo)
$ git checkout -b bar
Switched to a new branch 'bar'
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (bar)
$ git branch
* bar
foo
master
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (bar)
$ git checkout foo
Switched to branch 'foo'
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (foo)
$ git branch -d bar
Deleted branch bar (was 9125325).
55@DESKTOP-B4EABDM MINGW64 ~/desktop/gittest (foo)
$ git branch
* foo
master
git log로 조회한 커밋보다 앞서있는 커밋이 있을 수 있음
3) 병합하기
방향







* 충돌 발생




'ect > git' 카테고리의 다른 글
[git] Gi&GitHub 실습 (0) | 2024.05.10 |
---|---|
[git] Reset 방법 (0) | 2023.03.23 |
[git] 오류 메시지_The requested URL returned error: 403 (0) | 2023.03.10 |
[git] Github 협업하기1 (0) | 2023.03.10 |
[git] github 이론 강의2 (0) | 2023.02.11 |