Git 고급

Violet_Evgadn·2023년 9월 25일
0

Git

목록 보기
32/33

Rebase -i

rebase -i란?

이전에 말했듯 필자는 rebase라는 명령어를 그렇게 좋아하지 않는다.
하지만 rebase -i는 가끔 활용하는데 이 명령어를 통해 과거의 커밋을 수정할 수 있기 때문이다.

git rebase -i를 수행하면 HEAD와 지정한 커밋 사이의 커밋들의 히스토리를 수정할 수 있다.
git rebase -i를 수행하면 에디터에는 커밋들의 목록이 보이며 각 커밋 앞에 옵션들 중 하나를 활용함으로써 커밋을 선택 편집할 수 있다.

rebase -i 명령으로 출력되는 커밋들은 Git Log와 달리 아래쪽으로 갈수록 최신 커밋이다.
또한 rebase -i는 "지정한 커밋과 HEAD 사이의 커밋들"을 수정할 수 있는 명령어이므로 최초 커밋인 init 커밋은 수정이 불가능하다는 특징을 가진다.

rebase -i 옵션

  • p(pick) : 커밋을 변경 없이 활용

    • 기본 옵션
  • r(reword) : 커밋 메시지를 편집

  • e(edit) : 커밋을 수정(amend) 할 수 있도록 일시 정지 상태가 됨

  • s(squash) : 커밋이 부모 커밋에 합쳐져 커밋이 사라진 것처럼 보임

  • d(drop) : 해당 커밋을 제거함

rebase -i

위에서 말했듯 아래로 갈수록 최신 커밋이며 pick 부분을 원하는 옵션으로 바꾸어 원하는 동작을 수행할 수 있다.


히스토리에서 파일 삭제하기

1. 파일의 히스토리 조회

git blame [-L <시작 줄, 끝줄>]

해당 파일을 변경했던 커밋 히스토리를 보여준다.
-L 옵션을 사용할 경우 시작 줄과 끝 줄을 지정하여 특정 범위를 누가 변경했는지에 대한 히스토리도 볼 수 있다.

해당 명령어를 통해 삭제해야 할 내용(혹은 파일)이 어떤 커밋에서 최초로 추가되었는지 확인할 수 있다.

2. 히스토리의 파일 삭제

git filter-branch --tree-filter 'rm -f <파일이름>' HEAD

HEAD로부터 모든 히스토리에서 지정한 파일을 삭제하는 명령어이다.
git filter-branch 명령은 다양한 기능을 가지고 있는데 그 \중 --tree-filter 옵션은 히스토리 전체에서 원하는 파일을 삭제할 수 있게 된다.

추가로 원격 저장소에도 이 설정을 적용해야 한다면 로컬 저장소에서 먼저 위 명령어로 파일 삭제 처리를 한 뒤 git push -f 명령을 통해 변경 사항을 적용해 줘야 한다.

참고로 “BFG”라는 프로그램이 있는데 이 프로그램을 통해 더욱 쉽게 히스토리에서 파일을 삭제할 수 있다.


Git 단축 명령 만들기

git alias를 사용하면 git 명령어를 조금 더 쉽게 사용할 수 있다.
보통 --global 옵션과 함께 사용하는 게 좋다.

Alias 지정 방법

# st라는 이름을 가진 git 단축 명령 생성
git config --global alias.st status

위와 같이 alias.<별칭>으로 별칭을 지정하면 그 옆에 있는 명령어(위에선 status)가 git 명령어 뒤의 옵션이나 명령어로 입력되는 것과 동일하게 동작한다.

즉, 위와 같이 지정한 후 git st를 입력하면 git status를 입력한 것과 동일하게 동작하는 것이다.

만약 Option까지 포함하고 싶다면 모든 명령어를 큰따옴표("")로 묶어주면 된다.

# git graph라는 단축 명령어 생성
git config --global alias.graph “log –oneline – graph –all”

Global .gitignore 만들기

일반적으로 .gitignore파일은 .git 파일이 위치한 폴더(Git 작업 폴더)에 생성한다.

하지만 OS별로 무조건적으로 생기는 필요 없는 파일이나 보안적으로 민감한 파일들은 설정 없이도 무조건 커밋 되지 않도록 설정하고 싶을 수 있다.
이때 global_gitignore를 활용할 수 있다.

방법은 간단하다.

  1. global_gitignore라는 파일을 사용자의 홈 폴더에 생성

  2. 파일에 커밋 시키고 싶지 않은 파일들 입력

    • .gitignore 파일을 생성하는 것과 동일하게 만들면 된다.
  3. git config --global core.excludesfile [global_gitignore 파일 절대 경로]

    • 위 명령어를 통해 global_gitignore 파일을 Global .gitignore 폴더로 설정할 수 있음
profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글