깃은 이미 잘 설명된 글이 많으므로, 여기서는 내게 필요한 부분만 예제와 함께 모아 둔다.
commit에 변경사항이 빠진다?
git add는 커밋을 위해 스테이징 영역에 파일을 추가한다. 하지만, 추가할 때 파일 이름이 추가되는 것이 아니라, 현재까지의 변경사항이 추가되는 것이다. 그러므로, A 라는 파일을 git add 명령어로 스테이징 영역에 파일을 추가한 후 수정하면, 나중에 수정한 내용은 커밋에 포함되지 않는다.
git add와 git commit -a의 차이점
git add는 새로 만든 파일(untracked)이나 수정된 기존 파일을 스테이징 영역(Staging Area)에 추가한다. 이에 비해 git commit -a는 수정된 기존 파일만 추가하면서 커밋을 시도하기 때문에, 새로만든 파일은 누락할 수 있다.
깃의 cherry pick
스냅샷 기반으로 파일을 저장하는 깃의 체리픽은 Perforce, SVN 같은 기존 VCS의 체리픽과 다르게 동작한다.
기존 VCS는 특정 커밋을 체리픽하면 CL 사이의 변경 분이 반영되는데, 깃은 특정 커밋에 포함된 파일이 그대로 반영된다. 다시 말해, 1개의 커밋만 체리픽해도 그 이전 커밋에서 변경된 사항도 딸려온다.
rebase가 안된다?
>git checkout my_branch >git merge master There is no tracking information for the current branch. Please specify which branch you want to rebase against. See git-rebase(1) for details. git rebase <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=<remote>/<branch> my_branch
위와 같은 에러와 함께 안된다면, 공통 부모 커밋을 찾지 못해 rebase를 할 수 없다는 뜻이다.
위 예제에서는 my_branch가 master에서 가지쳐 나온 브랜치이고, 이 브랜치를 master에 rebase 시도 했다. 그러므로, rebase할 my_branch 브랜치 upstream 브랜치를 아래와 같이 정해주자.
>git branch -u master
커밋 메시지의 기본 에디터 변경
명령창을 통해 커밋 메시지를 작성할 때, 깃은 시스템 에디터를 사용한다. 다른 어플리케이션으로 에디터를 바꾸고 싶다면 core.editor를 바꾸면 된다.
>git config --global core.editor emacs
노트패드로 바꾸고 싶다면 아래와 같이 하면 된다.
>git config --global core.editor notepad
만약 path 선언이 안된 어플리케이션의 전체 경로를 입력하고 싶다면 아래와 같이 입력하자.
> git config --global core.editor "'C:\Sublime Text\subl.exe' -n -w"
바꾼 후, 커밋을 해보면 커밋 메시지를 통해 서브라임 텍스트로 수정할 수 있다. 그리고, 열린 파일을 저장 후 닫으면 커밋이 진행된다.
터미널에서 한글 안보이는 문제
깃은 인코딩을 변경하지 않는다. 라인 피드 이슈를 제외하고 말이다. 그러므로, 윈도우의 명령창(cmd 나 git-cmd)에서 한글이 안보이는 것은 깃이 아닌 다른 도구를 확인해야 한다.
만약, git-bash에서는 제대로 보이는데 명령창에서만 제대로 안보인다면 윈도우의 명령창이 참조하는 환경 변수으로 해결할 수 있다.
>set LC_ALL=C.UTF-8
참조