[OSS 2022]내가 보려고 정리한 GitHub 사용법 3

OOSUlZ·2022년 7월 19일
0
post-thumbnail

#1 rebase

base commits이란 무엇일까?
아래 그림처럼 바로 push나 PR을 했던 commit들이 차곡차곡 쌓인 상태를 말한다.
commit을 새로 할때마다 기본 commit이 차곡차곡 쌓인 상태에서 새로운 commit을 또 쌓게 될 수 밖에 없다.
즉, 다른 오픈소스 개발자에 의해 프로젝트가 계속 변경되면 commit이 계속 추가될 수도 있다는 것이다.
위에 기술한 사유 때문에 사용자가 갖고 있던 base commits을 새롭게 갱신해줄 필요가 있다

이것이 바로 rebase이다 base만 교체해서 충돌을 방지하는 것이다.
이 과정을 GIF로 담아 보았다.

○ 명령어 세부설명 (오픈소스 프로젝트에 새로운 commit이 추가된 상황)

(1) $ git fetch upstream master (최신 가져오기)
ㄴ 추가된 최신 commit들을 로컬로 가져온다 (fetch만 하는것이 나음 .git 히스토리 폴더에만 저장)
ㄴ pull을 해서 가져오지 않는 이유는 명령어를 두번 쓴거와 같기 때문이다 (pull = fetch + merge)

fetch = 원격 저장소(repository)에서 커밋, 파일 등을 가져와서 볼 수 있음
원격저장소에 있는 변경사항들을 로컬저장소에 가져오기 전에 변경내용을 확인하고 싶은 경우 사용
pull = 원격저장소(repository)에 있는 변경사항들을 로컬저장소로 가져와 합칠때 사용
fetch랑 다르게 로컬디렉로리에 변경내용을 병합
merge = 다른 branch에서 작업을 다 끝낸 파일을 원래 master 브랜치에 합치는 것

(2) $ git rebase upstream/master ("upstream/master" 브랜치명이 자동 생성)
ㄴ 현재 Base를 최신으로 갱신한다

GitHub 내에서도 이 과정을 수행할 수 있는데, 우측 상단의 Fetch upstream을 눌러보면 확인 가능하다

(1) Fetch가 필요없는 상황

(2) Fetch가 필요한 상황

○ 내가 작업하던 소스코드가 다른사람에 의해 변경될 때는 어떻게 해야하지?

만약 내가 작업하던 소스코드가 다른사람에 의해 변경되고 commit 될 때가 있을 수도 있다.
이러한 경우에는 다음과 같은 절차로 진행하면 된다.

rewind (수정된 내꺼빼기) > rebase (베이스 수정/내용 패치) > (내가 만들었던 내용 넣기)

수정내역(commit) 과거 시점으로 되감기(rewind 과정)

(1) $ git rebase -i --root
ㄴ -i 는 rebase를 할 때, interactive 기능을 사용하기 위해 사용하는 옵션 (이전의 커밋조작을 위함)
ㄴ --root 는 최초 커밋부터 리베이스하기 위해 붙이는 옵션

(2) $ git log --oneline
ㄴ --oneline은 log를 한줄로 보여줌

(3) $ git status
ㄴ rewind 상태 확인하기

이 과정을 마치고 아까 기술했던 rebase 과정을 시행하면 된다.

알아두면 좋을 명령어
1) rebase 취소 = $ git rebase --abort
2) 히스토리 전체 원상 복구 하는 방법 = $ git reset --hard origin/master

이상으로 git 사용기본법을 마치도록 하겠습니다
모르는게 있으면 댓글 달아주세요!

profile
천천히,꾸준하게

0개의 댓글