#title Git & Tips [[TableOfContents]] === ì¼ë°˜ === ==== 알아ë‘ë©´ ì¢‹ì€ ê¸°ëŠ¥ ==== ===== alias g='git' ===== 예) .bashrc ì— alias ê¸°ë¡ alias gs='git status -s' alias gp='git pull' ===== 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ëœ ì»¤ë°‹ì€ rebase를 하면 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 브랜치로 ì´ë™í•˜ëŠ” 것과 ë™ì¼í•¨. ==== 브랜치 ì œê±° ==== [[code(git branch -D 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 한다. === patch === ==== ìƒì„± ==== {{{ git diff --no-prefix > patchfile # íŒ¨ì¹˜íŒŒì¼ ìƒì„± cd path/to/top # íŒ¨ì¹˜í•˜ê³ ìž í•˜ëŠ” 소스 위치 patch -p0 < patchfile # 패치 ì ìš© }}} ==== ì ìš© ==== {{{ git diff > patchfile # íŒ¨ì¹˜íŒŒì¼ ìƒì„± cd path/to/top # íŒ¨ì¹˜í•˜ê³ ìž í•˜ëŠ” 소스 위치 patch -p1 < patchfile # 패치 ì ìš© }}} === 기타 === ==== cherry-pick 중 conflicts í•´ê²° ==== 1. conflict ë°œìƒ íŒŒì¼ ìˆ˜ì • 2. Merge ìƒíƒœ ì œê±°(reset) 후 add stash 하는 ë°©ë²•ë„ ìžˆì§€ë§Œ ì´ ë°©ë²•ì´ ê°€ìž¥ 쉬운 방법ì´ë‹¤. [[code(git reset [filename])]] [[code(git add [filename])]] ==== CRLF ë¬¸ì œ ==== https://www.lesstif.com/pages/viewpage.action?pageId=20776404 2줄 요약 * CORE.EOL * {{{{color:red}core.eol = native}}} 기본 ì„¤ì •. 시스템ì—ì„œ line ending ì„ ì²˜ë¦¬í•˜ëŠ” ë°©ë²•ì— ë”°ë¥¸ë‹¤. windowsì—서는 CRLF 를 ì‚¬ìš©í•˜ê³ Linux, OS X 는 LF 만 사용한다. * {{{{color:red}core.eol = crlf}}} CRLF 를 line ending 으로 사용한다. * {{{{color:red}core.eol = lf}}} LF를 line ending 으로 사용한다. * CORE.AUTOCRLF * {{{{color:red}core.autocrlf = false}}} 기본 ì„¤ì •ì´ë‹¤. 파ì¼ì— CRLF 를 ì¼ë“ LF 를 ì¼ë“ git ì€ ìƒê´€í•˜ì§€ ì•Šê³ íŒŒì¼ ê·¸ëŒ€ë¡œ checkin, checkout 한다. ì´ ì„¤ì •ì€ line ending ì´ ë‹¤ë¥¸ OS ì—서는 text file ì´ ë³€ê²½ë˜ì—ˆë‹¤ê³ 나오므로 위ì—ì„œ 언급한 여러 가지 ë¬¸ì œê°€ ë°œìƒí• 수 있다. * {{{{color:red}core.autocrlf = true}}} text fileì„ object database ì— ë„£ê¸°ì „ì— CRLF 를 LF ë¡œ 변경한다. * {{{{color:red}core.autocrlf = input}}} LF를 line ending 으로 사용한다. {{{ ## ì„¤ì • $ git config --global core.eol native ## ì„¤ì • í™•ì¸ $ git config --global --list|grep core.eol }}} ==== git config 순서 ë° ìœ„ì¹˜ ==== {{{ $ git config --system ## /etc/gitconfig $ git config --global ## ~/.gitconfig $ git config --local ## repo/.gitconfig }}} ê° ì„¤ì • 파ì¼ì— ì¤‘ë³µëœ ì„¤ì •ì´ ìžˆìœ¼ë©´ system부터 순서대로 ë®ì–´ 씌운다. 즉, gitì€ ê°€ìž¥ ë¨¼ì € [[code(/etc/gitconfig)]]ì„ ì°¾ê³ , 다ìŒìœ¼ë¡œ [[code(~/.gitconfig)]] 순서로 찾는다. ==== gerritì— push í• ëŒ€ unpacker error ë°œìƒ ì‹œ ==== ê°™ì€ idì— patch를 ì¶”ê°€í•˜ë ¤ê³ í• ë•Œ ë°œìƒí•˜ëŠ” 경우 --no-thin 옵션으로 packingì„ í•˜ì§€ ì•Šê³ push 하면 ë 수 있다. [[code(git push origin HEAD:refs/for/master --no-thin)]] ==== 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 (* [[code(.gitignore)]]는 확장ìžê°€ 아니다. [[code(.gitignore)]] 파ì¼ë§Œ ì ìš© ëœë‹¤.) ==== Emoji for GitHub ==== http://www.emoji-cheat-sheet.com/ Emoji emoticons listed on this page are supported on Campfire, GitHub, Basecamp, Redbooth, Trac, Flowdock, Sprint.ly, Kandan, Textbox.io, Kippt, Redmine, JabbR, Trello, Hall, Plug.dj, Qiita, Zendesk, Ruby China, Grove, Idobata, NodeBB Forums, Slack, Streamup, OrganisedMinds, Hackpad, Cryptbin, Kato, Reportedly, Cheerful Ghost, IRCCloud, Dashcube, MyVideoGameList, Subrosa, Sococo, Quip, And Bang, Bonusly, Discourse, Ello, Twemoji Awesome, Got Chosen, Flow, ReadMe.io, esa, DBook, Groups.io, TeamworkChat, Damn Bugs, Let's Chat, Buildkite, ChatGrape, Dokuwiki, Usersnap, Discord, Status Hero, Bitbucket, Gitter, and YouTube. ==== GUI Clients ==== https://git-scm.com/downloads/guis/ ---- CategoryDev