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
부분을 원하는 옵션으로 바꾸어 원하는 동작을 수행할 수 있다.
git blame [-L <시작 줄, 끝줄>]
해당 파일을 변경했던 커밋 히스토리를 보여준다.
-L
옵션을 사용할 경우 시작 줄과 끝 줄을 지정하여 특정 범위를 누가 변경했는지에 대한 히스토리도 볼 수 있다.
해당 명령어를 통해 삭제해야 할 내용(혹은 파일)이 어떤 커밋에서 최초로 추가되었는지 확인할 수 있다.
git filter-branch --tree-filter 'rm -f <파일이름>' HEAD
HEAD로부터 모든 히스토리에서 지정한 파일을 삭제하는 명령어이다.
git filter-branch
명령은 다양한 기능을 가지고 있는데 그 \중 --tree-filter
옵션은 히스토리 전체에서 원하는 파일을 삭제할 수 있게 된다.
추가로 원격 저장소에도 이 설정을 적용해야 한다면 로컬 저장소에서 먼저 위 명령어로 파일 삭제 처리를 한 뒤 git push -f
명령을 통해 변경 사항을 적용해 줘야 한다.
참고로 “BFG”라는 프로그램이 있는데 이 프로그램을 통해 더욱 쉽게 히스토리에서 파일을 삭제할 수 있다.
git alias를 사용하면 git 명령어를 조금 더 쉽게 사용할 수 있다.
보통 --global
옵션과 함께 사용하는 게 좋다.
# 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”
일반적으로 .gitignore
파일은 .git 파일이 위치한 폴더(Git 작업 폴더)에 생성한다.
하지만 OS별로 무조건적으로 생기는 필요 없는 파일이나 보안적으로 민감한 파일들은 설정 없이도 무조건 커밋 되지 않도록 설정하고 싶을 수 있다.
이때 global_gitignore
를 활용할 수 있다.
방법은 간단하다.
global_gitignore
라는 파일을 사용자의 홈 폴더에 생성
파일에 커밋 시키고 싶지 않은 파일들 입력
.gitignore
파일을 생성하는 것과 동일하게 만들면 된다.git config --global core.excludesfile [global_gitignore 파일 절대 경로]
global_gitignore
파일을 Global .gitignore 폴더로 설정할 수 있음