TIL 2021.02.13

kyukim·2021년 2월 13일
2

TIL

목록 보기
34/314

🧐 TIL (Today I Learned)

1. git remote, git fetch, git rebase, Detached HEAD, git switch -c

step1이 리뷰어로부터 approved, merged 되었기 때문에, 베이스 저장소에서는 step1에 관한 건 아예 끝났고, 로컬 저장소에서도 더 이상 건들일 일이 없기때문에 삭제해도 무방하다. 다음과 같은 명령어로 삭제했다.

$ git checkout [로컬_메인_브랜치_이름]
$ git branch -D [step1]

git remote

내 메인 브랜치는 로컬에서는 작업하지 않는다. 메인 브랜치는 베이스 저장소에 있는 최종 결과물을 업데이트하기로 한다. 그래서 베이스 저장소에서 merged 된 최종 결과물을 가져오려고 한다. 동기화 작업을 해야한다. 먼저, 베이스 저장소를 다음과 같은 명령어로 가져온다.

$ git remote add -v [가져올_베이스_저장소의_브랜치의_이름] [로컬에서_지정할_이름] [베이스_저장소_url]

그러면 git remote -v를 통해 가져온 베이스 저장소를 확인할 수 있다. 방금 가져온 베이스 저장소를 동기화 할 수 있다.

git fetch

$ git fetch [로컬에서_지정한_베이스_저장소_이름] [로컬_메인_브랜치_이름]

git fetch는 리모트 저장소에는 있지만 로컬에는 없는 커밋들을 다운받는다. 그리고 리모트 브랜치가 가리키는 곳을 업데이트한다. 방금과 같은 경우에는 베이스 저장소에서 가져온 브랜치가 가리키는 곳을 업데이트한다.

$ git branch

fetch 뒤에 git branch 명령어를 확인해보면 [가져온_베이스_저장소의_브랜치의_이름] 라고 나온다. 예를 들면, kyu-kim-kr/step1과 같이 뜬다. /로 구분되어진 것은, 베이스 저장소에 있는 kyu-kim-kr 에서 step1 이 merged 되었기 때문에 이름이 kyu-kim-kr/step1처럼 나온 것이다. step2가 merged 되면 kyu-kim-kr브랜치에서 step2가 업데이트 되면서 kyu-kim-kr/step2git fetch 를 통해 가져올 수 있을 것이다.

그런데 동기화를 하기위해 git fetch 명령어를 입력했지만 실제로는 로컬 상태를 전혀 바꾸지 않는다. 실제로 git fetch하고 코드 상태를 확인해보면 그대로이다. 이때는 그냥 커밋들을 다운로드했다고 정도로 이해하면 된다.

git fetch 했을 때 다운로드 완료된 상태

실제로 git fetch 하면 내 로컬의 상태가 바뀌는 게 아니라 commit들이 그 아래로 다운로드 되었을 뿐이다.

내 작업에 반영하기

git fetch로 다운로드한 커밋들을 내 작업에 반영하기 위한 명령어는 여러개가 존재한다.

git cherry-pick
git rebase
git merge
등등

사실 git fetch 후 merge 하는 일이 드문일이라 이 일을 동시에 하는 명령어가 존재하는데 그게 바로 자주 보고 들었던 git pull 이다.

git rebase

내게 주어진 미션은 git rebase 를 통해 커밋들을 한 줄기로 깔끔하게 정리하는 것이었다. git fetch 이후에 git rebase [가져온_베이스_저장소_이름] [가져온 베이스_저장소의_브랜치] 를 입력하면 내 메인 브랜치가 바뀐 모습을 볼 수 있다. (가져온 베이스 저장소의 브랜치와 내 메인 브랜치 이름이 같을 때)

Detached HEAD, git switch -c [new-branch-name]

브랜치라는 것이 단순히 커밋들을 참조하는 것이라는 것을 이해하면 여러 상황에서 당황하지 않을 수 있다

이번에 나 같은 경우엔, step이 베이스 저장소에 merged 되지 않은 상태에서 git branch -D를 통해서 로컬 저장소에 있는 step을 삭제해버려 main만 남은 상태였다.

근데 브랜치는 단순히 커밋을 참조하는 것이고 브랜치와 함께 커밋이나 데이터가 삭제되지 않았다는 것을 이미 알고 있었기 때문에, 천천히 생각해서 해결할 수 있었다.

먼저 커밋들은 아직 살아남은 상태이기 때문에 HEAD를 이전에 브랜치가 가리키던 커밋으로 옮겨서 새 브랜치를 만들어주기만 하면 되었다.


✅To-do

- 깃 PR 이후 upstream, rebase

  1. 체스만들기. 미션3

  2. 루카스에 있는 자바 공부할 거리 공부하기

  3. 생활코딩 객체지향 파트 (클래스 패스, 패키지, API, abstarct, final, 인터페이스, 다형성, 예외1 문법, 예외2 예외던지기, 예외3 만들기, Object 클래스, 상수와 enum, 참조, 제네릭) 링크

  1. 인프런 김영한님 스프링 입문 강의 (14강/28강 (50.00%) | 시간 : 140분/321분) 링크

나중에 해야 할 To-do 링크


profile
제 생각이 담긴 블로그입니다

4개의 댓글

comment-user-thumbnail
2021년 2월 13일

저도 김영한 님 스프링 입문 강의 들어보려고 하는데 어떤가요?ㅎㅎ

1개의 답글
comment-user-thumbnail
2021년 2월 13일

큐 놀러왔어요! 여전히 꾸준하게 작성하시네요👍👍

1개의 답글