본문 바로가기

ect/git

[git] git 이론 강의1

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' 카테고리의 다른 글