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_______ : 따로 보관한 수정내용을 꺼내옴
'GIT > [do it] 깃허브 입문 (완)' 카테고리의 다른 글
[ Do it ] 깃&깃허브 입문 _06. 깃허브에서 개발자와 소통하기 (0) | 2021.05.06 |
---|---|
[ Do it ] 깃&깃허브 입문 _05. 깃허브로 협업하기 (0) | 2021.04.16 |
[ Do it ] 깃&깃허브 입문 _04. 깃허브로 백업하기 (0) | 2021.03.30 |
[ Do it ] 깃&깃허브 입문 _02. 깃으로 버전 관리하기 (0) | 2021.03.24 |
[ Do it ] 깃&깃허브 입문 _01. 깃 시작하기 (0) | 2021.03.23 |