티스토리 뷰

Github

[Github]T Academy Seminar - 2 브랜치

감자형 2017. 12. 22. 01:56

브랜치란?

작업 흐름 가지, 커밋 그래프, 커밋 줄기


각각의 작업 흐름 병행


때때로 병합하거나 버리거나 삭제


배포후 ->개발브랜치에서 계쏙 작업하다가 -> 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관련 기능으로 바로 전환해서 개발시 편리













공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함