티스토리 뷰
브랜치란?
작업 흐름 가지, 커밋 그래프, 커밋 줄기
각각의 작업 흐름 병행
때때로 병합하거나 버리거나 삭제
배포후 ->개발브랜치에서 계쏙 작업하다가 -> bugreport 들어올지 안들어올지 모르기때문에
장점
1. 배포 중일때 옛날 브랜치로 돌아가서 뭐가 잘못됬는지확인할 경우 유용
2. 상호 독립 다수 로컬 브랜치
3. 아주 쉽게 문맥전환
4. 역할 구분에 활용하기 좋다(배포/개발/테스트)
5. 구현하려는 기능 단위브랜치도 좋음.
6.
master 브랜치
1. 지금 까지 작업한 단일 브랜치
2. 주 작업 영역 (MAIN)
지금 껏 master브랜치는 기본 영역이므로 현재까지 hello.html, css파일을 작업한것들은
지금 master브랜치에서 관리 되고 있었다.
3. 베포,테스트,작업용 브랜치로 나누어서 작업을 한다 보통
4. commit은 역추적을 할 수 있다. 이전에 commit된 정보들을 담고 있으므로
5. commit을 하면 각각의 것들의 포인터로 연결되어있음.
- 실습
1. 현재 브랜치 상태를 확인하기
(모든 브랜치 보기)
$git branch
* master
$git branch -v
* master b1bfb50 hello.html
깃 commit id를 출력 해준다
2.브랜치 생성하기
$git branch testing
아무것도 안나온것이 정상이다
3.브랜치 확인하기
$git branch
* master
testing
=> testing이 추가 된것을 알 수 있다. 추가는 되었지만
현재 상태는 master로 되어있는것을 알 수 있다.
4. 브랜치 확인하기
$ git branch -v
* master b1bfb50 hello.html
testing b1bfb50 hello.html
현재 master가 가리키는 commit id와
testing는 master가 가리키는 commid id들을 포인터로 연결 되 어있음.
브랜치는 커밋아이디만 가리킴
각 브랜치는 특정 (최종 커밋)을 가리킴
HEAD는 현재 브랜치를 가리킴
결국, HEAD는 현재 브랜치의 최종 커밋을 가리킨다.
5. 브랜치 변경하기
$ git checkout testing
Switched to branch 'testing'
작업공간도 바뀌고 브랜치도 바뀜
$git branch
master
* testing
checkout하는 순간 -> master를 가리키던 HEAD가 -> Testing으로 변화 한다.
실습 D3 - testing 브랜치에 추가 작업
1.test.js 파일 생성, hello.html파일 script src="test.js" 추가
2. 상태 확인 하기
$ git status
On branch testing
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: hello.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.js
no changes added to commit (use "git add" and/or "git commit -a")
3. 일일이 add해주기 귀찮으므로 모든것들을 commit해줄때는 -a 옵션
$ git commit -a -m "add test.js"
[testing 1c1483b] add test.js
1 file changed, 1 insertion(+)
4.
$ git status
On branch testing
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: test.js
김관현@KGH MINGW64 ~/hello (testing)
$ git branch -v
master b1bfb50 hello.html
* testing 1c1483b add test.js
김관현@KGH MINGW64 ~/hello (testing)
$ git checkout master
A test.js
Switched to branch 'master'
5. 현재 브랜치 master -> testing과 합치겠다 병합 merge
$git merge testing
김관현@KGH MINGW64 ~/hello (master)
$ git merge testing
Updating b1bfb50..1c1483b
Fast-forward
hello.html | 1 +
1 file changed, 1 insertion(+)
=> 합병 된것을 알 수 있다
6. 현재 브랜치 상태 보기
$ git branch -v
* master 1c1483b add test.js
testing 1c1483b add test.js
7. 실수 , 취소 -> 잘못 병합하였을 경우 어떻게 할까
김관현@KGH MINGW64 ~/hello (master)
로그를 확인해서 커밋아이디로 reset명령어로 되돌린다
이때, 로그에서 맨마지막 commit 아이디를 사용한다. 그전 작업으로
가기때문에.
$ git log
commit 1c1483bb4efd607ac5e7d01e87b3631a0082831e
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 14:50:55 2017 +0900
add test.js
commit b1bfb504aa4e9dbb84f28ccbb47218360937cb58
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 14:22:22 2017 +0900
hello.html
commit 50bcbcd5a47563893c9fca653b3e10c2695521d1
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 14:06:41 2017 +0900
add styling
commit cb5bbf850f76d83345cd818fe468e3dcdf0dcb27
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 13:53:06 2017 +0900
add hello.html
김관현@KGH MINGW64 ~/hello (master)
$ ^C
김관현@KGH MINGW64 ~/hello (master)
$ git reset --hard 1c1483bb4efd607ac5e7d01e87b3631a0082831e
HEAD is now at 1c1483b add test.js
=> 이때 working 트리도 변화한다.
master가 testing 이전 합병으로 돌아 가야한다.
어떤특정 시점으로 돌아 갈 수 있음.
- 브랜치 실습
1. hello.html에 아래 한 줄 추가 git add
2. 새로 커밋 추가 git commit -m " "
3. testing브랜치 합치기 git merge testing
4. 종이에 현재 상황 그림 그리기
5. hello.html 파일 수정후
김관현@KGH MINGW64 ~/hello (master)
$ git add hello.html
김관현@KGH MINGW64 ~/hello (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: hello.html
김관현@KGH MINGW64 ~/hello (master)
$ commit -m "hello.html modi"
bash: commit: command not found
김관현@KGH MINGW64 ~/hello (master)
$ git commit -m "hello.html modi"
[master daaa796] hello.html modi
1 file changed, 2 insertions(+)
김관현@KGH MINGW64 ~/hello (master)
$ git merge testing
Already up-to-date.
김관현@KGH MINGW64 ~/hello (master)
$ git log
commit daaa7961c47fbdf9df4318472962da93836a480d
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 15:04:18 2017 +0900
hello.html modi
commit 1c1483bb4efd607ac5e7d01e87b3631a0082831e
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 14:50:55 2017 +0900
add test.js
commit b1bfb504aa4e9dbb84f28ccbb47218360937cb58
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 14:22:22 2017 +0900
hello.html
commit 50bcbcd5a47563893c9fca653b3e10c2695521d1
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 14:06:41 2017 +0900
add styling
commit cb5bbf850f76d83345cd818fe468e3dcdf0dcb27
Author: kgh <kgh940525@gmail.com>
Date: Wed Dec 20 13:53:06 2017 +0900
add hello.html
김관현@KGH MINGW64 ~/hello (master)
$ git branch -v
* master daaa796 hello.html modi
testing 1c1483b add test.js
6. 실습설명
git merge
현재브런치를 내 브런치에 합친다.
git reset --hard 4324 를
하고나면 커밋시 master 브랜치에서 새로운 가지가 분기가 나누어 지게 된다.
커밋하기 전상태 둘간 어떤 변화가 합쳐질지 알아서 확인을 해준다(Three way merge)
git branch -v
* master 30b5cae add a div
testing a5f5bef add test.js
커밋 메시지 요구
$ git merge testing
Auto-merging hello.html
Merge made by the 'recursive' strategy.
hello.html | 1 +
test.js | 2 ++
2 files changed, 3 insertions(+)
create mode 100644 test.js
$ git branch -v
* master 8c9b527
깃이 차이점만 따로 커밋을 해준다.
7. 브랜치 현재 상황 보여주기
김관현@KGH MINGW64 ~/hello (master)
$ git log --oneline
5b79623 modify
1c1483b add test.js
b1bfb50 hello.html
50bcbcd add styling
cb5bbf8 add hello.html
8. 나중에 브랜치를 정리 해주는것 rebase를 해준다. 가지가 너무많아질수 있으므로
9. 요약
git init, git branch, git add, git checkout, git status
git merge, git commit, git reset --hard, git log
- Git 주요 정리
리모트 저장소
중심 기준점이 github
1. 리모트 저장소 생성하기
repository 생성하기
저장소 url, name
생성된 github address
https://github.com/kgh940525/Github_seminar.git
2. 깃 리모트 저장소 추가하기
$ git remote add origin https://github.com/kgh940525/Github_seminar.git
3. 내 깃 리모트에다가 master 내용을 넣어준다
$ git push -u origin master
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (17/17), 1.73 KiB | 0 bytes/s, done.
Total 17 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To https://github.com/kgh940525/Github_seminar.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
4. git repository -> 다시실행시 F5
master 에 있던 파일들이 들어가는것을 확인할 수 있다.
5. 이제 오픈소스를 활용할 수 있다.
6.다른 개발자가 다른 깃 주소파일들을 Clone을 받으면 내 로컬의 어떤 저장소를 만들어 내는것
김관현@KGH MINGW64 ~/hello (master)
$ git clone https://github.com/kgh940525/Github_seminar.git Github_seminar2
Cloning into 'Github_seminar2'...
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 17 (delta 4), reused 17 (delta 4), pack-reused 0
Unpacking objects: 100% (17/17), done.
7. 클론후 상태 지금 현재 Github_seminar2를 클론한 상태이다
이제 깃허브 경로인 hello 디렉터리에 가면 Github_seminar2가
생성된 것을 알 수 있다. 결국 저 url값을 받아와서 새로운 디렉터리를
클론한것이라고 생각하면 편함.
8. 새로 시작할 경우에는 새로운저장소로 같이 한다.
9.브랜치 그래프로 확인하기
김관현@KGH MINGW64 ~/hello (master)
$ git log --graph --oneline
* 5b79623 modify
* 1c1483b add test.js
* b1bfb50 hello.html
* 50bcbcd add styling
* cb5bbf8 add hello.html
- 실습 revert로 복구
1. 최신본의 기준은 github이다
김관현@KGH MINGW64 ~/hello (master)
$ git checkout testing
Switched to branch 'testing'
김관현@KGH MINGW64 ~/hello (testing)
$ git merge master
Updating 1c1483b..5b79623
Fast-forward
hello.html | 1 +
1 file changed, 1 insertion(+)
김관현@KGH MINGW64 ~/hello (testing)
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
2. 누군가 잘못된것을 커밋하였을 경우 리셋을 하려면 -> 뒤에꺼를 다시 반영해야된다
이전의 커밋을 되돌리게 하기 위함
되돌리는 경우의 내용을 새로 찍어버린다.
예) test.js 생성한것을 -> 지워버릴때
3. 특정 커밋의 역커밋을 남긴다. 변경분을 복구하는 커밋을 기록한다
김관현@KGH MINGW64 ~/hello (master)
$ git revert 1c1483
[master eeb553a] Revert "add test.js"
1 file changed, 1 deletion(-)
김관현@KGH MINGW64 ~/hello (master)
$ git revert 1c1483b
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Untracked files:
Github_seminar2/
nothing added to commit but untracked files present
김관현@KGH MINGW64 ~/hello (master)
$ git revert 1c1483
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Untracked files:
Github_seminar2/
nothing added to commit but untracked files present
김관현@KGH MINGW64 ~/hello (master)
$ git log -oneline
fatal: unrecognized argument: -oneline
김관현@KGH MINGW64 ~/hello (master)
$ git log --oneline
eeb553a Revert "add test.js"
5b79623 modify
1c1483b add test.js
b1bfb50 hello.html
50bcbcd add styling
cb5bbf8 add hello.html
4. reset vs revert
reset은 뒤에 커밋이 모두 지워져버린다.
revert 뒤에 커밋이 살아있고 새로운 커밋을 생성 시켜준다.
5. 참고 :
cherry-pick 커밋내용이 아닌데 필요할 경우 그 부분만 복사 하는 경우만 가져오는경우를 cherry-pick 이라고 함.
- 실습 Fork
특정 저장소를 내 영역으로 복사한다.
1. react -> github -> 내 repository로 가져온다.(Fork)
2. 여기다가 작업을 하면 내 자신만 push를 할 수 있다.
3. react 이럴때 한번 소스 뜯어볼 수 있다.
4. 변경부분으로 들어가서 split 옵션 사용시 변경된 부분 확인가능
5. 어차피 내가 fork() 한부분이라서 상관 X
6. option-> setting-> Delete this repository 로 지울수 있음.
7. 같이 하는 팀 멤버 write-> @id name 을 써주면 된다.
8.$ git --block brame hello.html
brame을 사용하면 수정한 부분이 보이게 된다.
- 실습 조장
new organization
이름만 입력, 주소랑
조장은 -> 조원들의 깃허브 아이디로 초대할 수 있음.
초대 수락되면
새로운 repository를 추가한다.
이제 새로운 조원들은 새로운 파일이 올라온것을 확인 할 수 있다.
* rebase를 연습하면 되게 좋다 *
1. http://learnbranch.urigit.com/ 여기 사이트 예제!
2. gitupDesktop 커멘트로 일일이 치지않아도 된다
3. intelliJIdea (Java Develop)
4. visual studio code
깃관리를 하면서 git관련 기능으로 바로 전환해서 개발시 편리
'Github' 카테고리의 다른 글
[Github]T Academy Seminar - 3 고급 주제 (0) | 2017.12.22 |
---|---|
[Github]T Academy Seminar - 1 기본 사용법 (0) | 2017.12.22 |
[Github] 깃허브정리 - 3 (0) | 2017.09.22 |
[Git Hub] 깃허브 정리 -2 (0) | 2017.09.22 |
[Github] Github 협업 Pull Request 과정 정리 (0) | 2017.09.13 |
- Total
- Today
- Yesterday
- TensorFlow
- 복습
- C언어
- 초보자를 위한 C언어 300제
- 머신러닝
- 알고리즘
- Android
- 안드로이드
- 노드
- 감자개발자
- Spring
- db
- programming
- 학교
- 프로그래밍
- 텐서플로우
- Algorigm
- Controller
- 코드엔진
- 스프링
- 백준
- 리버싱
- 개발하는 관광이
- MVC
- node
- BFS
- C langauge
- node.js
- 감자코딩
- 백준알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |