git filter-branch

2022. 10. 23. 15:29·개발도구/Git

최근에 다른 기업의 지인 개발자들을 만나서 개발 이야기를 하다가 그 기업의 팀장님은 git 마법사라며 filter-branch 같이 들어보지도 못한 git 기능들을 많이 알고 계신다면서 이야기를 듣게 되었다. 

filter-branch가 과연 뭘까 귀 기울여듣게 되면서 따로 집에 와서 찾아보게 되었다. 참고할만한 블로그도 몇 없어서 유투브 영상을 통해서 공부해보았다. 이를 공유하고자 글을 작성한다.

 


 

filter-branch가 필요한 상황 2가지

1. 민감한 파일이 실수로 원격 저장소에 push 되었을 때

- 원격 저장소에 실수로 올린 파일을 지우고 다시 push를 하여도, 이전에 파일이 올라왔던 기록을 통하여 파일 확인이 가능해지므로 무용지물이 되어버리는데 이런 상황을 간단히 해결하고 싶을 때 사용함. 

 

2. 프로젝트를 분리하고 싶을 때

- 진행하고 있던 프로젝트의 규모가 커지게 되면서 2개로 프로젝트를 분리하고 싶을 때 사용함. 

 

 


 

* 참고사항

git add -> git commit -> git push 명령어로 통하여 원격 저장소에 commit내역을 기록할 수 있는데

 

이때 작업하고 있는 내용들은 Work Tree라는 구조를 통해서 관리하고 되고 그 중에서 최종적으로 commit 하고자 하는 내용들을 add하게 되면 add 라는 명령어를 통하여 Index라는 것으로서 대상들이 관리되게 된다. 

참고로 add를 마친 파일이나 내용들은 stage 상태가 되었다고 말한다. 

stage상태가 된 내용들을 commit하게 되면 원격저장소가 아닌 로컬저장소에서 까지 관리가 되고 push 하게되면 원격저장소로 commit내역이 적재가 되는 것이다. 

 

 

위 2가지 상황 중 첫번째 상황을 예로 들어 설명하겠다. 

 

push되면 안되는 파일을 add하여 commit후 push까지 마쳐 원격저장소에까지 파일이 적재되어 해당 파일을 없애고 싶을 때 filter-branch로 특정 commit 기록을 찝어서 덮어쓰기하여 있었던 일도 없었던 일로 기록할 수 있어 파일을 없앨 수 있다. 

 

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 파일명' --prune-empty HEAD

 

--force

: 따지지 말고 시키는 대로 하라

 

--index-filter

: filter-branch를 어떤 filter를 적용하냐에 대한 옵션으로 index에 있는 것들을 지우라는 것임

 

'   '

: 어떻게 filtering을 할지에 대한 정보

 

--ignore-unmatch

: 파일명과 매치되지 않는 commit내역들은 무시하고 filtering하라는 git rm 옵션임

 

--prune-empty

: index에서 파일명과 매칭되는 것들을 지우다 보면, 빈껍데기 commit들이 생길 수 있는데 그러한 commit들을 없애라는 옵션임.

 

 

작은따음표 부분을 통해서 실제 filtering 작업이 수행되는데 그 filter가 index 부분에 적용된다는 것이다. index-filter 라는 것은 로컬저장소 안에서 filter를 index부분에 변화를 가하는 것이다.

filter가 적용되었다면 로컬저장소에 있는 index에 변화가 생긴 상태이다. 따라서 이를 push 하여야 원격 저장소의 적재된 내역도 변화될 것이므로 git push --force 명령어를 이용하여 push하면 원격저장소에 올라간 파일을 업앨 수 있다. 

 

 

강제 (force) push 수행하기

git push force 란? 위와 같이 가끔씩 사용자의 로컬저장소의 변경사항들이 원격저장소의 변경사항들과 호환되지 않는 경우 사용자의 변경사항을 push 하는 유일한 방법은 git push force 를 이용하는 것

hyolls100.tistory.com

 

이렇듯 원격저장소에 파일을 실수로 올렸다할지라도 해당 filter를 통하여 index부분을 수정함으로써 그렇게 수정된 내용을 원격저장소에 투입을 할 수 있다는 것이다. 

 

 

 

 

 

 

영상은 여기에 공유하겠다. 

 

'개발도구 > Git' 카테고리의 다른 글

git cherry-pick (원하는 commit 가져오기)  (0) 2022.07.31
git remote branch 가져오기  (0) 2022.07.31
git remote add (원격저장소 추가)  (0) 2022.07.31
git branch -d (브랜치 삭제하기)  (0) 2022.07.03
강제 (force) push 수행하기  (0) 2022.07.03
'개발도구/Git' 카테고리의 다른 글
  • git cherry-pick (원하는 commit 가져오기)
  • git remote branch 가져오기
  • git remote add (원격저장소 추가)
  • git branch -d (브랜치 삭제하기)
횰쓰
횰쓰
개발 성장 블로그입니다
횰쓰토리개발 성장 블로그입니다
  • 횰쓰
    횰쓰토리
    횰쓰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS 공부
        • 운영체제
        • 네트워크
        • 컴퓨터구조
        • 데이터베이스
        • 알고리즘
        • 소프트웨어공학
        • 자료구조
        • 웹
      • 프로그래밍
        • Python
        • NodeJS
      • 프로젝트
        • React 프로젝트
      • 개발도구
        • Git
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Sync/Async
    전이진트리
    Max힙
    한국사능력검정시험 심화
    chrome
    프로세스 주소공간
    3 Way Handshake
    4 way handshake
    운영체제
    리스트정렬여부
    자가균형 이진탐색트리
    페이지 교체
    포화이진트리
    Min힙
    SQL/NOSQL
    AVL트리
    멀티 스레드
    tcp
    RB Tree
    카드뭉치
    RB트리
    둘만의 암호
    이진탐색트리
    멀티 프로세스
    큐
    경쟁상태(Race Condition)
    스택
    Push-force
    Git
    최태성인강
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
횰쓰
git filter-branch
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.