[Git] Learn Git Branching로 기초 배워보기

tiki·2021년 11월 26일
0

Git

목록 보기
1/1

평소에는 Git을 로컬에서 저장과 버전을 관리하기 위해서 사용을 했었지만, 이번에 깃을 좀 더 잘 활용할 수 있는 기회가 생겨서 공부해보려고 합니다.

📔 Git 명령어 학습

  1. 우아한Tech 10분 깃코톡 🎲 와일더의 Git Commands 을 통해서 깃 명령어에 대한 기초 그림을 그릴 수 있었습니다. 해당 유튜브 영상에서 러닝 깃 브랜칭 사이트에 대한 추천을 해주셔서 실제 학습하면서 더 공부할 수 있었습니다!!

  2. 러닝 깃 브랜칭 사이트. 약 2~3시간정도 걸리는 과정이며, 이미지와 애니메이션으로 명령어를 통한 커밋들이 어떻게 움직이는지 알기 쉽게 되어있습니다. 그리고 명령어를 활용한 여러가지 응용문제들이 있어서 이해를 하기 쉬웠습니다.👍

학습할 수 있는 과정들은 다음 사진과 같습니다.


🔧 메인 명령어

1. Git merge

git merge <합치고_싶은_브랜치>

두 가지의 브랜치를 합치는 방법 중에 하나입니다.

2. Git rebase

git rebase <합치고_싶은_브랜치>

두 브랜치를 합치는 두번째 방법은 리베이스입니다. 커밋들을 모아서 복사한 뒤, 다른 곳에 놓는 과정입니다.

⁉️ merge vs rebase

개발 커뮤니티에서 merge를 하는것과 rebase 사이의 트레이드 오프에 대해 많은 논의가 이루어지고 있습니다. 각각이 가지는 장단점이 있기에 잘 선택해서 사용하는 것이 중요하겠습니다.

merge

  • 작업의 히스토리가 그대로 보존되어 있지만, 커밋 트리가 깔끔하지 않습니다.

rebase

  • 히스토리를 수정하여 새로 커밋 트리를 만드므로, 이력이 수정되지만 커밋 트리가 깔끔해지는 장점을 가지고 있습니다.

대체적으로 외국에서는 merge를 선호하고 한국에서는 rebase를 선호한다고 합니다


3. HEAD와 상대참조

HEAD는 현재 체크아웃된 커밋을 가리킵니다.다시 말하자면 현재 작업중인 커밋입니다. HEAD는 항상 작업트리의 가장 최근 커밋을 가리킵니다. 작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는것으로 시작합니다.

HEAD를 분리하는 방법

git checkout <대상>

상대 참조를 이용하는 방법

한번에 한 커밋 위로 움직이는 ^

git checkout <대상>^

한번에 여러 커밋 위로 올라가는 ~num

git checkout <대상>~<올리고_싶은_숫자>

4. Git reset

git reset <커밋>

git reset은 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌립니다. 이런 관점에서 "히스토리를 고쳐쓴다"라고 말할 수 있습니다. 즉, git reset은 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것입니다.

  • 히스토리를 고치므로 원격저장소가 아닌 로컬저장소에서 사용하는 방법입니다!!

5. Git revert

git revert <커밋>

각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 리셋(reset)을 잘 쓸 수 있습니다만, "히스토리를 고쳐쓴다"는 점 때문에 다른 사람이 작업하는 원격 브랜치에는 쓸 수 없습니다.

  • 변경분을 되돌리고, 이 되돌린 내용을 다른 사람들과 공유하기 위해서는, git revert를 써야합니다.

6. Git cherry-pick

git cherry-pick <커밋1> <커밋2> <...>

현재 위치(HEAD) 아래에 있는 일련의 커밋들에대한 복사본을 만들겠다는 것을 간단히 줄인 말입니다. 원하는 커밋들을 골라담아올 수 있다는 장점이 있습니다.

7. Git rebase -i

git rebase -i <대상>~<수정_개수>

인터렉티브 리베이스가 의미하는 뜻은 rebase 명령어를 사용할 때 -i 옵션을 같이 사용한다는 것입니다.

인터렉티브 리베이스 대화창이 열리면, 3가지를 할 수 있습니다:

  • 적용할 커밋들의 순서를 UI를 통해 바꿀수 있습니다
  • 원하지 않는 커밋들을 뺄 수 있습니다.
  • 밋을 스쿼시(squash)할 수 있습니다. (커밋을 합칠 수 있습니다)

8. Git Tag

git tag <태그_이름> <커밋_위치>

Git 태그는 특정 커밋들을 브랜치로 참조하듯이 영구적인 "milestone(이정표)"으로 표시합니다.

중요한 점은, Git 태그는 커밋들이 추가적으로 생성되어도 절대 움직이지 않는다는 것입니다. 태그는 커밋 트리에서 특정 지점을 표시하기위한 닻같은 역할을 합니다.


🚥 원격 저장소

1. Git clone

git clone <저장소>

git clone은 원격 저장소의 복사본을 로컬에 생성할때 사용하는 명령어입니다.

2. Git fetch

git fetch <브랜치>

원격 저장소에서 데이터를 가져오는 명령어를 git fetch라고 불립니다.

git fetch가 하는 일

  • 원격 저장소에는 있지만 로컬에는 없는 커밋들을 다운로드 받습니다.
  • 로컬에서 나타내는 원격 저장소의 상태를 실제 원격 저장소의 현재 상태와 동기화합니다.

git fetch가 하지 않는 일

  • 로컬 상태는 전혀 바꾸지 않는습니다. main 브랜치도 업데이트하지 않고 파일 시스템의 모습이던 그 어떤것도 바꾸지 않습니다.
  • 데이터를 다운로드는 하지만, 실제로 로컬 파일들이나 브랜치를 변경하지는 않습니다.

3. Git pull

git pull <브랜치>

원격 저장소의 변경을 fetch하고 그이후에 merge하는 작업의 과정을 한번에 하는 명령어가 git pull 입니다.

4. Git push

git push <브랜치>

git push는 변경을 원격 저장소에 업로드하고 그 원격 저장소가 변경된 새 커밋들을 합치고 갱신하게 합니다. git push가 끝나고 나면, 다른 사람들이 원격 저장소에서 해당 작업을 내려받을 수 있게 됩니다.

profile
하루하루 조금씩 발전하려는 개발자 입니다.

0개의 댓글