GIT/[do it] 깃허브 입문 (완)

[ Do it ] 깃&깃허브 입문 _03. 깃과 브랜치

web_seul 2021. 3. 25. 17:39
반응형

 03-1. 브랜치란? 

 

브랜치가 필요한 이유

브랜치 기능 살펴보기

master : 최신 커밋

branch : 분기하다

merge : 병합하다

 

 03-2. 브랜치 만들기 

 

실습상황 설정하기

1. 디렉터리 manual 생성, 이동

$ mkdir manual
$cd manual

2. .git 디렉터리 생성확인

$ git init
$ ls -al

3. work.txt파일 생성

$ vim work.txt

4. [ I ] 로 입력모드에서 content1입력

5. work.txt파일을 스테이지에 올리고 커밋, 커밋 메시지는 work1

$ git add work.txt
$ git commit -m "work 1"

6. 커밋내역 확인

7. work.txt 재커밋2 _ content2, "work2"

8. work.txt 재커밋3 _ content3, "work3"

9. git log로 커밋 내역 확인

HEAD -> master : 현재 작업중인 브랜치는 master이다

 

새 브랜치 만들기

1. 브랜치를 만들거나 확인하는 명령 : git branch

$ git branch

2. 기본생성된 master 브랜치

3. apple의 브랜치 만들기

$ git branch apple

4. 브랜치 확인하기

$ git branch

5. master브랜치 위에 apple브랜치가 추가된것 확인

현재 작업중인 브랜치 *표시

6. 커밋로그화면 변화

HEAD -> master  ==> HEAD -> master, apple

7. google, ms 브랜치 생성,  저장소내 브랜치 확인

$ git branch google
$ git branch ms
$ git branch

 

브랜치 사이 이동하기 - git checkout

1. HEAD -> master, google, ms

2. work.txt에 master content4 내용 추가 (master branch인 상태)

$ vim work.txt
$ git commit -am "master content4"

3. --online : 한줄에 한 커밋씩 나타냄

$ git log --oneline

4. master : master content4

5. apple 브랜치로 체크아웃하기 (master -> apple)

$ git checkout apple

6. 현재 브랜치상태가 apple로 바뀜

7. 현재 브랜치의 커밋 로그 확인

$ git log --oneline

8. HEAD -> apple, google, ms로 바뀜

apple : work3의 상태

work.txt 파일내용 확인하기

$ cat work.txt

9. apple 브랜치에는 master content4가 없음

 

 03-3 브랜치 정보 확인하기 

 

새 브랜치에 커밋하기

1. apple 브랜치의 work.txt에 apple content4추가

$ vim work.txt

2. apple.txt 생성

$ vim apple.txt

3. 두 txt파일 같이 올리기

$ git add .
$ git commit -m "apple content4"

4. 커밋 저장확인

$ git log --oneline

5. (HEAD -> apple) apple content4

6. 각 브랜치의 커밋 함께 보기 --branches

$ git log --oneline --branches

7. (HEAD -> apple) apple content4

   (master) master content4

   (HEAD -> google) work3

8. 그래프 형태로 보기 --graph

$ git log --oneline --branches --graph

9. l 로 커밋의 관계를 보여줌

10. /로 브랜치 관계를 보여줌

 

브랜치 사이의 차이점 알아보기

$ git log master..apple

왼쪽을 기준으로 오른쪽을 비교함 _ master에는 없고 apple에만 있는 커밋 (=apple content4)

$ git log appel..master

왼쪽을 기준으로 오른쪽을 비교함 _ apple에는 없고 master에만 있는 커밋 (=master content4)

 

 03-4 브랜치 병합하기 

merge : 브랜치 병합

 

서로 다른 파일 병합하기

1.

$ cd ~
$ git init manual-2 //새로운 디렉터리만들기 + 저장소 초기화
$ cd manual-2
$ ls -al //.git/ 디렉터리가 만들어진 것 확인

2. work.txt생성, "work1" 메시지와 커밋

$ vim work.txt
$ git add work.txt
$ git commit -m "work1"

3. o2 브랜치 만들기

$ git branch o2

4. master.txt생성, "master work2"메시지와 커밋

$ vim master.txt
$ git add master.txt
$ git commit -m "master work2"

5. o2 브랜치로 체크아웃

$ git checkout o2

6. o2.txt 생성, "o2 work2" 메시지와 커밋

$ vim o2.txt
$ git add o2.txt
$ git commit -m "o2 work2"

7. 현재 커밋상태 확인

$ git log --oneline --branches --graph

8. o2브랜치와 master브랜치 병합 : master로 체크아웃

$ git checkout master

9. 병합하기

$ git merge o2

10. 커밋메시지 'Merge branch o2' 생성

[ Esc ] -> :wq -> 커밋메시지 수정 가능 03-1. 브랜치란? 

11. o2.txt파일이  master브랜치에 합쳐진것 확인

$ ls -al

12. 커밋한 루트 확인

$ git log --oneline --branches --graph

 

+

빨리감기 병합

master브랜치에 변화가 없을경우 fast-forward 로 병합

 

+

브랜치를 병합할 때 편집기창이 열리지 않게 하려면

편집기 창을 열지않고 깃지정 커밋메시지를 그대로 사용

$ git merge o2 --no-edit

편집기 창을 열지않고 깃지정 커밋메시지를 수정해서 사용

$ git merge o2 --edit

 

같은 문서의 다른 위치를 수정했을 때 병합하기

1.  manual-3 저장소 만들기, 내부로 이동

$ cd ~
$ git init manual-3
$ cd manual-3

2. work.txt파일 생성

3. work.txt파일을 스테이지에 올리고 "work1" 메시지와 커밋

$ git add work.txt
$ git commit -m "work1"

4. 새로운 브랜치 o2 생성 _ master와 o2 모두에 work1커밋됨

$ git branch o2

5. master에서 work.txt 수정

$ vim work.txt

6. work.txt 수정 _ master content2 

7. 수정한 work.txt "master work2"메시지와 커밋

8. o2 브랜치로 체크아웃, work.txt파일 수정

$ git checkout o2
$ vim work.txt

9. work.txt파일 수정 _ o2 content2 

10. 수정한 work.txt "o2 work2"메시지와 커밋

$ git commit -am "o2 work2"

11. o2브랜치와 master브랜치 합치기 _ master로 체크아웃

$ git checkout master

12. o2 브랜치를 master브랜치로 끌어오기

$ git merge o2

13. 자동 빔 실행, 커밋 메시지 : 수정가능

메시지 작성 -> [Esc] -> :wq 저장, 종료

14. Auto-merging work.txt 로 병합 완료 메시지

다르게 수정된 work.txt파일 병합 확인하기

$ cat work.txt

 

같은 문서의 같은 위치를 수정했을 때 병합하기 

: 충돌(conflict) 발생

1.~12. 동일

1.  manual-4 저장소 생성, 이동

$ cd ~
$ git init manual-4
$ cd manual-4

2. work.txt 생성

3. work.txt파일을 스테이지에 올리고 "work1" 메시지와 커밋

$ git add work.txt
$ git commit -m "work1"

4. 새로운 브랜치 o2 생성 _ master와 o2 모두에 work1커밋됨

$ git branch o2

5. master에서 work.txt 수정

$ vim work.txt

6. work.txt 수정 _ master content2 

7. 수정한 work.txt "master work2"메시지와 커밋

$ git commit -am "master work2"

8. o2 브랜치로 체크아웃, work.txt파일 수정

$ git checkout o2
$ vim work.txt

9. work.txt파일 수정 _ o2 content2 

10. 수정한 work.txt "o2 work2"메시지와 커밋

$ git commit -am "o2 work2"

11. o2브랜치와 master브랜치 합치기 _ master로 체크아웃

$ git checkout master

12. o2 브랜치를 master브랜치로 끌어오기

$ git merge o2

 

13. CONFLICT (content) : Merge conflict in work.txt

AUTOMATIC merge failed: fix conflicts and then commit the result.

14. 사용자가 직접 해결하여 커밋, work.txt 열기

$ vim work.txt

15.

<<<<HEAD master content2 ==== : master에서 수정된 내용

==== o2 content2 >>>>>o2 : o2에서 수정된 내용

에서 직접 수정

16. <<<<HEAD , ====, >>>>>o2 제거, 저장

17. 수정된 work.txt를 스테이지에 올리고 "merge o2 branch" 메시지로 커밋

18. 전체 관계 확인

$ git log --oneline --branches --graph

 

+

병합 및 충돌 해결 프로그램

2way merge / 3way merge

P4Merge : 무료, 직관적, 편리, 병합기능 우수, 단축키 지원x

Meld : 무료, 오픈소스, 파일비교, 직접 편집

Kdiff3 : 무료, 편리, 병합기능 우수, 한글 오류o

Araxis Merge : 유료, 대용량 파일 적합

 

병합이 끝난 브랜치 삭제하기

: 삭제 후 같은 이름의 브랜치를 만들면 이전 내용 복구가능

1. 현재 저장소의 브랜치 확인

$ git branch

2. 기본 master브랜치에서 브랜치 삭제 가능, master브랜치로 이동

$ git branch -d o2

3. 삭제

$ git branch -d o2

4. Deleted branch o2 삭제완료

 

 03-5 브랜치 관리하기 

 

브랜치에서 checkout 과 reset의 작동원리

1. 홈 디렉터리에서 test 라는 깃 저장소 생성, 이동

$ cd ~
$ git init test
$ cd test

2. c1.txt생성, "c1" 커밋메시지와 커밋

$ vim c1.txt
$ git add c1.txt
$ git commit -m "c1"

3. 커밋상태 확인

$ git log --oneline

(HEAD -> master) : 기본 master브랜치에 커밋됨

4. sub브랜치 생성, c1커밋

$ git branch sub

5. c2.txt 생성, "c2"메시지와 커밋

6. sub브랜치에 커밋 생성하기 _ sub로 체크아웃

$ git checkout sub

(HEAD -> sub)

7. s1.txt생성, "s1"메시지와 커밋

8. reset : 현재브랜지가 아닌 다른브랜치의 커밋으로 최신커밋 지정가능

git log로 c2커밋의 커밋해시 확인

$ git log --oneline --branches

9. 커밋해시 입력

$ git reset ###

10. 결과 확인

$ git log --oneline --branches --graph

11.  reset되어 sub브랜치는 c2로 바뀌고 기존의 s1은 삭제됨

 

수정 중인 파일 감추기 및 되돌리기 - git stash

작업중인 파일 감추기

1. st저장소 생성, 이동

$ cd ~
$ git init st
$ cd st

2. tracked(한번은 커밋한상태) 여야 git stash 사용 가능

3. f1.txt / f2.txt 스테이지 올리기, 커밋하기

4. f1.txt / f2.txt 수정 후 저장

$ vim f1.txt
$ vim f2.txt

5. 상태 확인

$ git status

6. 커밋하지않은 수정내용 보관하기

$ git stash //(save)

7. git status : modified 사라짐

8. stash목록에서 감춘파일 확인 가능

stash@{0}이 가장 최근, 숫자가 클수록 이전 stack

9. 가장 최근 항목 되돌리기

$ git stash pop

 

+

stash apply / stash drop

stash apply : 저장된 수정내용을 다시 사용할 경우 대비, 목록에서 가장 최근 항목을 되돌림

stash drop : 목록에서 가장 최근 항목 삭제

 

test)

git b______ : 새로운 브랜치 fixed 만듦

git ch_____ : fixed브랜치로 체크아웃

git l_______ : 커밋 로그에서 한 줄에 한 커밋씩 표시

git a_______ : 수정한 파일 전체를 스테이지에 올림

git l_______ : 커밋로그에 각 브랜치의 커밋을 그래프로 표시

git m______ : fixed브랜치를 master브랜치에 병합

c______ : 터미널 창에서 edit.txt내용 확인

git i_______ : doit 디렉터리를 만드는 동시에 지역 저장소 생성

git r_______ : 현재 커밋을 다른 브랜치에 있는 c1커밋으로 되돌림

git b_______ : 병합이 끝난 fixed브랜치 삭제

git s_______ : 작업트리의 수정내용을 따로 보관하여 감춤

git s_______ : 따로 보관한 수정내용을 꺼내옴

반응형