#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 === ==== 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