View

Learn Git Branching 정답 - 1편

hooti 2021. 3. 3. 17:29

 Learn Git Branching ! 

위코드때도 그랬지만 지금도 git을 하다보면 긴장되서 부들부들 떨게된다...😂 그래서 팀원분이 추천해주신 git 게임을 하면서 기초 지식을 정리하고 긴장하는 습관을 조금 고쳐보기로했다! 근데 평소에 커밋으로만 봐서 그런지 그래픽으로 그려진 브렌치들이 엄청 헷갈려서 혼났다; 소스트리 사용할때도 그랬는데 익숙해져야겠다! 분량이 길어서 두편으로 나눠서 올리도록 하겠다!

 

 

🖥 사이트 방문하기 🖥

 


 

 

  Learn Git Branching 풀이 

 

 

✋ Git 커밋소개 : 커밋은 git 저장소에 디렉토디에 있는 모든 파일에 대한 스냅샷을 기록하는 것이다. Git은 가능한 한 커밋을 가볍게 유지하고자 하기 때문에, 커밋할때마다 디렉토리 전체를 복사하지 않는다. 각 커밋은 저장소의 이전 버전과 다음버전의 변경내용(delta)만을 저장한다. 그래서 대부분의 커밋이 그 커밋 위의 부모커밋을 가르킨다.

 

🖥 문제 : 계속해서 직접 한번 해보세요! 이 창을 닫고, 커밋을 두 번 하면 다음 레벨로 넘어갑니다.

> git commit
> git commit

이미지를 누르면 gif가 실행됩니다.


 

✋ Git 브랜치 : 브랜치는 특정 커밋에 대한 참조(reference)에 지나지 않는다. 브랜치는 많이 만들어도 메모리나 디스크 공간에 대한 부담이 되지 않기 때문에, 작은 단위로 잘게 나누어 사용해도 좋다. 우선 브랜치를 단순히 하나의 커밋과 그 부모 커밋들을 포함하는 작업내역 이라고 생각하면 된다.

 

🖥  문제 : bugFix라는 새 브랜치를 만드시고, 그 브랜치로 이동해보세요

> git branch bugFix
> git checkout bugFix

// 한줄로 선언하기
> git checkout -b bugFix

이미지를 누르면 gif가 실행됩니다.

 


 

✋ 브랜치합치기(Merge) : git의 합치기(Merge)는 두 개의 부모(parent)를 가리키는 특별한 커밋을 만들어낸다. 두개의 부모가 있는 커밋이라는 것은 한 부모의 모든 작업내역과 나머지 부모의 모든 작업, 그리고 그 두 부모의 모든 부모들의 작업내역을 포함한다 라는 의미가 있다.

 

🖥  문제 : bugFix라는 새 브랜치를 만듭니다.  → git checkout bugFix를 입력해 bugFix 브랜치로 이동(checkout)합니다. → 커밋 한 번 하세요. → git checkout 명령어를 이용해 main브랜치로 돌아갑니다. → 커밋 또 하세요. → git merge 명령어로 bugFix브랜치를 main에 합쳐 넣습니다.

> git checkout -b bugFix
> git commit
> git checkout main
> git commit
> git merge bugFix

이미지를 누르면 gif가 실행됩니다.

 

 


 

✋ Git 리베이스 : 리베이스는 기본적으로 커밋들을 모아서 복사한 뒤, 다른곳에 떨궈 놓는것이다. 리베이스는 커밋의 흐름을 보기 좋게 한줄로 정리 할 수 있는 장점이 있다. 리베이스를 사용하면 저장소의 커밋로그와 이력을 깨끗하게 사용할 수 있다.

 

🖥  문제 : bugFix라는 새 브랜치를 만들어 선택하세요.  → 커밋 한 번 합니다. main 브랜치로 돌아가서 또 커밋합니다. → bugFix를 다시 선택하고 main에 리베이스 하세요.

> git checkout -b bugFix
> git commit
> git checkout main
> git commit
> git checkout bugFix
> git rebase main

이미지를 누르면 gif가 실행됩니다.

 

 

 


 

✋ Git HEAD : head는 현재 체크아웃된 커밋을 가르킨다. 쉽게 이야기하면 현재 작업중인 커밋이다. head는 항상 작업트리의 가장 최근 커밋을 가르킨다. 작업트리에서 변화를 주는 git 명령어들은 대부분 head를 변경하는것으로 시작된다. 일반적으로 head는 브랜치의 이름을 가르킨다.

 

🖥  문제 : 다음 레벨로 넘어가기 위해서는, HEAD를 bugfix에서 분리하고 그 커밋에 붙이세요. 각 커밋은 그것의 해시값으로 특정지을수 있습니다. 각 커밋의 해시값은 각 커밋을 나타내는 원안에 나타나있습니다.

> git checkout C4

이미지를 누르면 gif가 실행됩니다.

 


✋ Git 상대참조(1) : git 상대참조(Relative Ref)는 해시로 커밋을 구분하는것이 편하지 않았던 불편함을 해소해준다. 상대참조로 작업자가 기억할만한 지점에서 출발해서 다른지점에 도달하여 작업이 가능하다. 상대참조에선 두가지 방법이 있으며 참조인 HEAD도 상대참조를 위해 사용할 수 있다.

 

  • 캐럿연산자(^) : 한번에 한 커밋 위로 올라간다.(main^은 main의 부모, main^^은 main의 조부모를 의미한다.)
  • -<num> : 한번에 여러 커밋 위로 올라간다.

 

🖥  문제 : 이 레벨을 완료하기 위해서는, bugFix의 부모 커밋을 체크아웃 하십시오. 이렇게 하면 HEAD가 분리 될 것입니다. 해시를 이용해서도 할 수 있지만, 상대 참조를 활용하는 것을 연습해 보세요!

> git checkout bugFix
> git checkout HEAD^

이미지를 누르면 gif가 실행됩니다.

 


Git 상대참조(2) : 커밋트리에서 위로 여러단계를 한번에 올라가려면 틸드연산자(~)를 사용하자. 틸드연산자는 (선택적)올라가고 싶은 부모의 갯수의 숫자가 뒤에 온다. 상대참조를 사용하는 가장 일반적인 방법은(제작자기준) 브랜치를 옮길 때이다. -f 옵션을 이용하여 브랜치를 특정 커밋에 직접적으로 재지정할 수 있다.

아래의 명령어를 작성하면 main 브랜치를 HEAD에서 세번 뒤로 옮겨진다.

git branch -f main HEAD~3

 

🖥  문제 : 자 이제 상대 참조와 브랜치 강제의 조합을 봤으니 다음 레벨을 해결해 봅시다. 이 레벨을 통과하기 위해서, HEAD와 main과 bugFix를 제시되는 골지점으로 옮겨 주십시오.

> git branch -f master C6
> git checkout HEAD~1
> git branch -f bugFix HEAD~1

이미지를 누르면 gif가 실행됩니다.

 


Git 작업되돌리기: 작업을 되돌리는 방법은 여러가지가 있습니다. 변경내역을 되돌리는 것도 커밋과 마찬가지로 낮은 수준의 일(개별파일이나 묶음을 스테이징하는 것)과 높은 수준의 일(실제 변경이 복구되는 방법)이 있다. 먼저 후자의 방법을 다루도록 한다. Git에서 변경한 내용을 되돌리는 방법은 크게 두가지다.

 

  • Git reset(리셋) : 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌린다. 이런 관점에서 '히스토리를 고쳐쓴다'라고도 할 수 있으며, 마치 애초에 커밋을 하지 않은것처럼 예전 커밋으로 브랜치를 옮기는 것이다.
  • Git revert(리버트) : 로컬브랜치의 경우 리셋을 쓸 수 있지만 '히스토리를 고쳐쓴다' 라는 점때문에 다른 사람이 작업하는 리모트 브랜치에는 쓸 수 없다. 변경분을 되돌리고, 이 되돌린 내용을 다른사람과 공유하기 위해서는 리버트를 사용해야한다. 리버트를 사용하면 다른 사람들에게도 변경 내역을 밀어(push) 보낼 수 있다.

🖥  문제 : 이 레벨을 통과하려면, local 브랜치와 pushed 브랜치에 있는 최근 두 번의 커밋을 되돌려 보세요.

pushed는 리모트 브랜치이고, local은 로컬 브랜치임을 신경쓰셔서 작업하세요 -- 어떤 방법을 선택하실지 떠오르시죠?

> git reset HEAD~1
> git checkout pushed
> git revert HEAD

이미지를 누르면 gif가 실행됩니다.

 


 

Git Cherry-pick: 현재 위치(HEAD) 아래에 있는 일련의 커밋들에 대한 복사본을 만든다는 것을 간단하게 줄인 말이다. 굉장히 이해하기 쉬우면서도 마법같은 명령어다. 체리픽을 사용하면 우리가 원하는 커밋을 원하는 위치에 떨어뜨려준다.

 

🖥  문제 : 이 레벨을 통과하기 위해서는 몇개의 작업을 세개의 브랜치들에서 main 브랜치로 복사해와야합니다. 어떤 커밋들이 필요한지는 goal을 보고 확인하면 됩니다.

> git cherry-pick C3 C4 C7

이미지를 누르면 gif가 실행됩니다.

 


 

✋ Git 인터렉티브 리베이스: 체리픽은 작업자가 원하는 커밋과 해시값이 무엇인지 알 때, 아주 유용하다. 그렇다면 원하는 커밋을 모르는 상황에선 어떻게 해야할까? 이럴때 사용하는것이 인터렉티브 리베이스를 사용하면 된다. 인터렉티브 리베이스가 의미하는 뜻은 rebase 명령어를 사용할 때 -i 옵션을 같이 사용한다는 것이다. 이 옵션을 추가하면 git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄울것이다. 각 커밋을 구분할 수 있는 각각의 해시들과 메세지도 보여준다.

 

※ 스쿼시(squash) : 커밋을 하나의 커밋으로 합쳐주는 기능

 

🖥  문제 : 이번 레벨을 통과하기 위해서 goal에 나타난 순서대로 만들기 위해 인터렉티브 리베이스를 사용해봅시다. undo와 reset을 통해 했던 실수들은 되돌릴 수 있습니다 :D

> git rebase -i HEAD~4 (또는 git rebase -i master~4 --aboveAll)

// 팝업 ui가 뜬다면

-> 맨위 C2 omit 버튼을 누르기.
-> move바를 꾹 눌러 C4와 C5의 위치를 변경한다.

이미지를 누르면 gif가 실행됩니다.

 

'Review' 카테고리의 다른 글

MAC에서 CORS policy 오류 해결하기  (0) 2021.03.19
Learn Git Branching 정답 - 2편  (0) 2021.03.04
Font Awesome(폰트어썸)의 기능  (0) 2021.02.25
Flexbox Froggy 정답  (1) 2021.02.24
vue native event에 대한 개인적인 고찰  (0) 2021.02.23
Share Link
reply
«   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