Git

Git - Rebasing

Namiz_IT 2024. 7. 27. 10:21

 

Git에서 변경 사항 통합하기

지금까지 Git에서 변경 사항을 통합하는 방법으로 병합에 초점을 맞춰왔다. 빠른 전방 병합은 타겟 브랜치의 브랜치 포인터를 최신 커밋을 가리키도록 간단하게 이동시키는 반면, 세 가지 방법 병합은 소스 브랜치와 타겟 브랜치의 개발 히스토리를 연결하는 병합 커밋을 생성한다(때로는 병합 충돌을 발생시키기도 함).

 일부 팀과 개인은 프로젝트 히스토리가 더 체계적이고 간단하다고 생각하여 선형적인 프로젝트 히스토리를 유지하는 것을 선호한다. 병합과 병합 커밋을 피하고 선형적인 프로젝트 히스토리를 유지하려면 리베이스 프로세스를 사용할 수 있다.

 리베이스는 한 브랜치의 커밋에서 수행한 작업을 다른 브랜치에 재적용하여 완전히 새로운 커밋을 생성합니다. 이렇게 하면 원래 커밋과는 완전히 다른 커밋에서 브랜치를 생성한 것처럼 보일 수 있다.

 리베이스를 수행하려면 리베이스할 브랜치에 있어야 합니다. git rebase 명령을 사용하고 리베이스할 브랜치의 이름을 전달한다.

git rebase <base>  다른 브랜치 위에 커밋을 재적용

 

 리베이스는 완전히 새로운 커밋을 생성하므로 커밋 히스토리를 변경한다. 이런 작업을 하는 Git 작업을 사용할 때는 주의해야 한다.

Git Rebase 예시

# feature 브랜치에서 작업 중
git checkout feature

# main 브랜치를 기준으로 rebase
git rebase main
 

위 명령은 feature 브랜치의 커밋들을 main 브랜치의 최신 커밋 위에 옮겨 붙인다.

Git Rebase vs. Git Merge

  • Git Merge : 두 브랜치를 합쳐 새로운 커밋을 생성한다. 병합 커밋이 생성되어 히스토리에 남는다.
  • Git Rebase : 한 브랜치의 커밋을 다른 브랜치에 옮겨붙여 히스토리를 재작성한다. 병합 커밋이 생성되지 않고 선형적인 히스토리를 유지한다.

Git Rebase 주의사항

  • 커밋 히스토리 변경 : rebase는 커밋 해시값을 변경하기 때문에 이미 공유된 브랜치에 대해서는 신중하게 사용해야 한다.
  • 원격 저장소 : 원격 저장소에 push 하기 전에 rebase를 수행하는 것이 좋다.
  • force push : rebase 후에는 force push를 사용하여 변경된 커밋을 원격 저장소에 반영해야 한다.

언제 Git Rebase를 사용해야 할까요?

  • 개인 브랜치 : 자신의 개인 브랜치에서 커밋 히스토리를 정리하고 싶을 때
  • feature 브랜치 : main 브랜치와 병합하기 전에 feature 브랜치의 커밋을 정리하고 싶을 때
  • 선형적인 히스토리를 유지하고 싶을 때 : 복잡한 병합 히스토리를 단순화하고 싶을 때

파일 스테이징 해제 및 스테이징

Git 스테이징이란?

Git에서 스테이징(staging)이란, 수정된 파일들을 다음 커밋에 포함시킬 것을 미리 지정하는 과정을 의미한다. 즉, 스테이징 영역에 파일을 추가하면 다음 git commit 명령을 실행할 때 해당 파일의 변경 사항이 커밋에 포함된다.

왜 스테이징을 해야 할까요?

  • 선택적인 커밋: 모든 수정된 파일을 한꺼번에 커밋하지 않고, 필요한 파일만 선택하여 커밋할 수 있다.
  • 작업 단위 분리: 기능별로 파일을 나누어 스테이징하고 커밋하면, 커밋 히스토리가 더욱 명확해지고 관리하기 쉬워진다.
  • 작업 중단 및 재개: 스테이징을 통해 현재 작업 상태를 저장해두고, 다른 작업을 하다가 다시 돌아와 이어서 작업할 수 있다.

스테이징 관련 명령어

  • git add <파일명>: 파일을 스테이징 영역에 추가한다.
  • git status: 현재 작업 디렉토리의 상태를 확인한다. (스테이징 된 파일, 수정된 파일 등)

스테이징 해제하는 방법

  • git reset <파일명>: 스테이징 된 파일을 스테이징 해제한다.
  • git reset: 모든 스테이징 된 파일을 해제한다.

스테이징 예시

# 파일 수정
vim myfile.txt

# 수정된 파일을 스테이징
git add myfile.txt

# 스테이징 상태 확인
git status

# 스테이징 해제
git reset myfile.txt

# 모든 스테이징 해제
git reset
 

스테이징과 관련된 추가 정보

  • git rm --cached <파일명> : 스테이징된 파일을 스테이징 해제하고, 작업 디렉토리에서 파일을 삭제하지는 않는다.
  • git stash : 현재 작업 중인 변경 사항을 임시 저장하고, 스테이징 영역을 깨끗하게 만든다.
  • git stash pop : 저장된 변경 사항을 다시 가져온다.

스테이징 요약

  • 스테이징은 커밋 전에 변경 사항을 준비하는 과정이다.
  • git add로 파일을 스테이징하고, git reset으로 스테이징을 해제한다.
  • 스테이징을 통해 커밋을 세분화하고 관리할 수 있다.

참조

https://www.oreilly.com/library/view/learning-git/9781098133900/

반응형