#title Git & Tip [[TableOfContents]] == 일반 == ==== 알아두면 좋은 기능 ==== ===== alias g='git' ===== ===== stashing ===== 현재 브랜치에서 작업중인 내용을 임시로 저장하고 다른 브랜치로 이동할 때 사용한다. ===== blame ===== 파일 라인 단위로 누가 마지막으로 수정했는지 보여준다. http://git-scm.com/docs/git-blame ==== 작업의 취소 ==== http://www.evernote.com/l/AMKuBFPL-uZItrAAGvEbqooTf52dvpkR1rQ/ ==== push의 취소 ==== http://whiteship.me/?p=13516 ==== commit 메시지 수정 ==== ===== 마지막 커밋을 수정하기 ===== [[Code($ git commit --amend)]] 마지막 커밋을 수정하는 방법은 매우 간단하다. 이 명령으로 텍스트 편집기가 열리고 메시지를 수정하면 된다. ===== 커밋 메시지를 여러 개 수정하기 ===== 예를 들어 마지막 3번째에 있는 커밋 로그를 수정하고 싶다면 rebase -i를 사용해서 수정해야 한다. 주의할 점은 이미 서버에 push된 커밋은 SHA-1 값이 바뀌기 때문에 가능하면 수정하지 말아야 한다. 만약 rebase에 익숙하지 않다면 다음을 주의 깊게 봐야 한다. https://git-scm.com/book/ko/v1/Git-%EB%8F%84%EA%B5%AC-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EB%8B%A8%EC%9E%A5%ED%95%98%EA%B8%B0 [[Code($ git rebase -i HEAD~3)]] 텍스트 편집기가 열리면 다음 같은 커밋 목록이 첨부되어 있다. {{{ pick ... pick ... pick ... }}} 여기서 커밋 목록 순서는 위쪽이 오래된 것이다. 마지막 3번째 커밋 메시지를 수정하려면 pick을 edit로 변경하고 저장 및 종료한다. {{{ edit ... pick ... pick ... }}} 저장하고 편집기를 종료하면 Git은 목록에 있는 커밋 중에서 가장 오래된 커밋으로 이동하고, 아래와 같이 다음은 어떻게 해야하는지 메시지를 보여준다. {{{ $ git rebase -i HEAD~3 Stopped at 7482e0d... updated the gemspec to hopefully work better You can amend the commit now, with git commit --amend Once you’re satisfied with your changes, run git rebase --continue }}} 마지막 커밋 메시지를 변경했을 때와 같이 [[code(git commit --amend)]] 으로 메시지를 변경하고 [[code(git rebase --continue)]]로 rebase를 계속한다. 이것을 반복하면 어떤 위치의 커밋 메시지도 수정할 수 있다. 다시 말하지만 주의할 점은 이미 서버에 push된 커밋은 SHA-1 값이 바뀌기 때문에 동료 개발자들을 혼란스럽게 할 가능성이 있으며 가능하면 수정하지 말아야 한다. ==== log ==== ===== commit 메시지의 첫 번째 줄만 출력 ===== [[code(git log --pretty=short)]] ===== 파일의 변경된 내용까지 출력 ===== [[code(git log -p)]] ===== 브랜치를 시각적으로 확인 ===== [[code(git log --graph)]] ==== branch ==== ===== 브랜치 확인 ===== 현재 브랜치 [[code(git branch)]] 모든 브랜치 [[code(git branch -a)]] ===== 브랜치를 만들고 변경 ===== 예) hotfix-A 브랜치로 변경 [[code(git checkout -b hotfix-A)]] [[code(checkout -b)]]는 [[code(git branch hotfix-A)]] 브랜치를 만들고, [[code(git branch checkout hotfix-A)]] hotfix-A 브랜치로 이동하는 것과 동일함. ==== merge ==== ===== 머지하는 것을 기록으로 남김 ===== 예) hotfix-A 브랜치에서 master 브랜치로 이동하여 master에 hotfix-A 브랜치를 merge. [[code(git checkout master)]] 마스터로 이동 [[code(git merge --no-ff hotfix-A)]] [[code(--no-ff)]] 옵션을 주면 merge commit 메시지 작성을 위한 에디터가 실행됨. {{{ Merge Branch 'hotfix-A' # Please enter a commit message to explain why this merge is necessary, # ... }}} ===== 머지 conflict 해결 ===== 예) 1. 충돌 발생 {{{ <<<<<<< HEAD ... ======= ... >>>>>>> hotfix-A }}} 2. ===, <<<, >>> 표시를 삭제하고 충돌문제를 해결한 후 저장한다. 3. 문제를 해결하고 commit 한다. [[code(git commit -m 'Fix conflict')]] 4. 다시 merge 한다. === diff 패치 생성 및 적용 === {{{ git diff --no-prefix > patchfile # 패치 생성 cd path/to/top/ # 이동 patch -p0 < patchfile # 적용 }}} --no-prefix 옵션 없이 생성된 patch 파일이 있다면, {{{ patch -p1 < patchfile }}} == 기타 == === gitignore === ==== Visual Studio ==== https://github.com/github/gitignore/blob/master/VisualStudio.gitignore ---- CategoryDev