Git 㨠GitHub ãä½é¨ããªãã身ã«ã¤ããåå¼·ä¼è¡ã£ã¦ãã
9/18(土) 15:30~ GitとGitHubを体験しながら身につける勉強会(名古屋) : ATND
è¡ã£ã¦ãã¾ããã
ãªããããããã¨è©±ããã¨ã«ãªã£ããã§ããã©ããã®å ´ã§è¨ããã³ãããã¨ã¨ãããã£ã¨ãã説æãã¦ãã°ããã£ããªããã£ã¦é¨åã®è£è¶³ãå
¼ããã¨ã³ããªã§ãã
é·ææ³¨æã
ã·ã§ã¼ãã«ãã
- git add ã®è©±
- git add -p/git reset -p ã®è©±
- ãªãã¸ã§ã³çªå·ããªã話
- ãã©ã³ãã®è©±
- git-completion ã®è©±ã__git_ps1 ã®è©±
- ã³ãããã®æå®ã®è©±
- reset ã®è©±
- rebase 㨠merge ã®è©±
- å ¬éãããã®ã® rebase ã®è©±
- stash ã®è©±
- TortoiseGitãHGãSVNã®ã¯ãªã
- å ¨ä½ãéãã¦
git add ã®è©±
Git 㨠SVN ã§ã¯ãadd ã«éãããåãååã®ãµãã³ãã³ãã§ãæå³ãç°ãªããã®ãããã¤ãããã¾ãã
ãã®ä¸ã§ã add ã¯ä¸çªä½¿ãã§ããããµãã³ãã³ããªã®ã§ãè¨åãããå ´é¢ãå¤ãã®ã ã¨æãã¾ãã
ã¾ããadd ã®éã㯠Git ç¹æã® index (ããã㯠staging area) ã«ããããã£ã¦ãããããé£ããèãã¦ãã¾ã人ãå¤ãããããã¾ããã
ãããããã³ãããã®ç²åº¦ãå°ããä¿ã¡ãããcommit -a ã使ãã°ããSVN ã® add ã¨ä¼¼ãããadd ã¯æåã®ä¸åã ããã¨ããæä½æãå¾ããã¨ãå¯è½ã§ãã
ãã ãããã§ã¯ãã¡ãã index ã®æ©æµã¯åãããã¨ãã§ãã¾ããããSVN ã¨éã commit æã«ãã¡ã¤ã«ãæå®ãããã¨ãã§ãã¾ããããã¾ããã®ã§ãå
¨ãåãã¨ããããã§ãããã¾ããã
ããã§ãã
- Git ã§ã¯ç´°ããåå²ããã³ããããå¾ããç°¡åã«ã²ã¨ã¤ã®ã³ãããã«ã¾ã¨ãããã¨ãã§ãã
- è¤æ°ã®ä¿®æ£ãä¸åº¦ã«è¡ããªããã°ãindex ã¯ã»ã¨ãã©ã®å ´åä¸è¦ã§ã常㫠working tree å ¨ä½ã commit ããã°ãã
ã¨ãããã¨ãèããã°ããã®æ¹æ³ã¯ååãã¢ãªãã ã¨æãã¾ãã
ã·ã§ã¼ãã«ããã«æ»ã
git add -p/git reset -p ã®è©±
ãhunk ã¬ãã«ã§ addããã§ãã -p ãªãã·ã§ã³ã«ã¯è¨åãã¾ããããåæ§ã«ãhunk ã¬ãã«ã§ resetããå¯è½ã§ãã
ããããreset ã« -p ãä»ããã ãã§ãã
- p ãä»ãã㨠hunk ãã¨ã« y,n,q,a,d,/,K,g,e,? ã®ã©ããé¸ã¶ã®ãèããã¾ãããããããã®æå³ã¯æ¬¡ã®éãã§ã (add ã®å ´å stageãreset ã®å ´å unstage)ã
æå | æå³ |
---|---|
y | ãã® hunk ã stage/unstage ãã |
n | ãã® hunk ã stage/unstage ããªã |
q | ãã® hunk ã stage/unstage ãããæ®ã£ã hunk ããã¹ã¦ stage/unstage ããªã |
a | ãã® hunk ã¨ãåããã¡ã¤ã«ã®æ®ãã® hunk ã stage/unstage ãã |
d | ãã® hunk ã¨ãåããã¡ã¤ã«ã®æ®ãã® hunk ã stage/unstage ããªã |
g | hunk ã鏿ãã¦ç§»åãã |
/ | æ£è¦è¡¨ç¾ã§ hunk ãæ¤ç´¢ãã¦ç§»åãã |
j | ãã® hunk ã® stage/unstage ã®æ±ºå®ããããæ¬¡ã®æªæ±ºå®ã® hunk ã«ç§»åãã |
J | ãã® hunk ã® stage/unstage ã®æ±ºå®ããããæ¬¡ã® hunk ã«ç§»åãã |
k | ãã® hunk ã® stage/unstage ã®æ±ºå®ããããåã®æªæ±ºå®ã® hunk ã«ç§»åãã |
K | ãã® hunk ã® stage/unstage ã®æ±ºå®ããããåã® hunk ã«ç§»åãã |
s | ãã® hunk ãå°ãã hunk ã«åå² (split) ãã |
e | ãã® hunk ãæåã§ç·¨éãã |
? | ãã«ãã表示ãã |
g ã / ã¯ãåç¬ã§å
¥åããã¨ç§»åå
ã® hunk ãæ¤ç´¢ããæ£è¦è¡¨ç¾ã®å
¥åãæ±ãããã¾ãã
ããã§ã¯ãªãããg2ããã/hogeãã®ããã«ç´æ¥æå®ãããã¨ãå¯è½ã§ãã
ãã®ãã¡ä¸çªä½¿ãã®ã¯ y 㨠n ã ã¨æãã®ã§ãã¨ãããã y 㨠n ã ãè¦ãã¦ããã°ããã§ãã
vim 使ããªãã»ãã®ãããã¤ãããã«è¦ãã¦ãã¾ãã¨æãã¾ãã
-p ãªãã·ã§ã³ã試ãã«ã¯ã以ä¸ã®æé ã§ã©ããã
- ä½ããã¡ã¤ã«ãç¨æãããããã§ã¯ hoge.txt ãä½ã£ãã¨ããã
- 4è¡ç¨åº¦ä½ããæ¸ããããã§ã¯ hoge, piyo, foo, bar ã¨æ¸ãããã¨ã«ãã (, ã§æ¹è¡ã®ã¤ãã)ã
- git add hoge.txt ã㦠git commit -m "add hoge.txt" ããã
- hoge.txt ã®åè¡ã®æ¬¡ã«ãä½ã追å ãããããã§ã¯ããã®æä½ã§åè¡ã hoge, aaa, piyo, bbb, foo, ccc, bar, ddd ã¨ãªã£ããã¨ã«ããã
- git add -p hoge.txt ãã¦ãæåã®ããã³ããã§ s ã鏿ããã
ããã§è²ã
ã¨è©¦ãã¾ãã
æ»ããããã°ãgit reset ã§ git add -p hoge.txt ããåã¾ã§æ»ããã¨ãå¯è½ã§ãã
ã·ã§ã¼ãã«ããã«æ»ã
ãªãã¸ã§ã³çªå·ããªã話
ããã¯å
¨ä½ã§ã¯è©±ãã¦ãªãã®ã§ãããã¡ãã£ã¨è©±é¡ã«ä¸ãã£ãã®ã§ã¤ãã§ã«ã
Git ã§ã¯ Subversion ã¨éãããªãã¸ã§ã³çªå·ã®ãããªé£çªã¯æ¯ããã¾ããã
ããé£çªãæ¯ãã«ãã¦ãããªãã¸ããªãè¤æ°ã«ãªããããæ¯ã£ãé£çªã¯ä¸åã®ãªãã¸ããªã«å¯¾ãã¦ã®ã¿ä¸æã¨ãªãã®ã§ããã¾ãå½¹ã«ç«ã¡ã¾ããã
ãã®ãããGit ã§ã¯ããããããé£çªãåã³ãããã«å²ãæ¯ãã®ã§ã¯ãªããåã³ãããã®å
容ããè¨ç®ãããããã·ã¥å¤ãã³ãããã®èå¥ã«ä½¿ã£ã¦ãã¾ãã
ããã·ã¥å¤ã¯ã³ãããã ãã§ãªããtree ãªãã¸ã§ã¯ã (ãã£ã¬ã¯ããªã«å¯¾å¿) ã blob ãªãã¸ã§ã¯ã (ãã¡ã¤ã«ã«å¯¾å¿)ãtag ãªãã¸ã§ã¯ã (注éä»ãã®ã¿ã°ã«å¯¾å¿) ã«ãç¨ãããã¦ãã¾ãã
ããã§ã¯è©³ããã¯èª¬æãã¾ããããããã Git ã®ãªãã¸ã§ã¯ããããã·ã¥å¤ã«ããèå¥å¯è½ã§ãããã¨ã«ããã
- ããã·ã¥å¤ã¯ãã®ãªãã¸ã§ã¯ãã®å 容ããã®ã¿æ±ºå®ããããããGit ã®ãªãã¸ã§ã¯ãã¯ãã¹ã¦ã¤ãã¥ã¼ã¿ãã«
- ãªãã¸ã§ã¯ãã®å䏿§ã®æ¯è¼ãé常ã«é«é
- ããã·ã¥å¤ãåãã§ããã°ããªãã¸ããªãã¾ããã§ãããã®ãªãã¸ã§ã¯ããåä¸ã®ãã®ã§ããã¨ããã (ãã¨ããããã¤ã³ã¿ã¼ãããè¶ãã§ãã£ã¦ããããã·ã¥å¤ã®ã¿ã®æ¯è¼ã§ OK)
ãªã©ã¨ããå©ç¹ãããã¾ãã
commit ãªãã¸ã§ã¯ãã¯å
å®¹ã«æ¥æãå«ããããåãã«è¦ããã³ãããã§ãå¥ã®ããã·ã¥å¤ã¨ãªãã¾ãããtree ã blob ãªãã¸ã§ã¯ãã®ããã·ã¥å¤ãè¦ãã¨ããããããã§ãããã
ãªãã¸ã§ã¯ãã®ããã·ã¥å¤ãè¦ãã«ã¯ãgit cat-file -p ã使ãã®ã便å©ã§ãã
ä¾ãã°ãé©å½ãªãªãã¸ããªã§ git log -1 --oneline ããçµæã
bf58771 add hoge.txt
ã ã£ãã¨ãã¾ããããããã§ãå
é ã® bfã»ã»ã»ãããã·ã¥å¤ã®å
é 7 æ¡ã«ãªã£ã¦ãã¾ãã
ããã·ã¥å¤ã¯å¯¾è±¡ã¨ãã¦ãããªãã¸ããªå
ã§ä¸æã«æ±ºå®ãããã¨ãã§ããã®ã§ããã°ãæçã§å
é ããã® 4 æ¡ã®ã¿ã®æå®ã§å¤§ä¸å¤«ã§ãã
7 æ¡ãããã°å¤§æµã®ç¶æ³ã§ã¯ä¸æã«æ±ºå®ã§ããã®ã§ããã®ããã«çãå½¢å¼ã®ããã·ã¥å¤ã¯ãã使ç¨ããã¾ãã
ããã§ããã®ããã·ã¥å¤ãç´è¿ã®ã³ãããã®ããã·ã¥å¤ (æ£ç¢ºã«ã¯ commit ãªãã¸ã§ã¯ãã®ããã·ã¥å¤) ã¨ãªãã¾ãã
ãã®ãªãã¸ã§ã¯ãã®è©³ç´°ãè¦ãããã«ãgit cat-file -p bf58771 ãå®è¡ããã¨ã
tree ae59f12bf77f9eeb74aad6ee3d883970a22b8a45 parent e05a728bb9f2e7d33e05316777bc926eb26200a2 ã»ã»ã»
ã¨ãªãã¾ããããã§ãtree ã®è¡ã«ããããã·ã¥å¤ãããã®ã³ããããå«ãã³ã³ãã³ãã®æä¸ä½ã® tree ãªãã¸ã§ã¯ãã®ããã·ã¥å¤ãparent ã®è¡ã«ããããã·ã¥å¤ãããã®ã³ãããã®åã® commit ãªãã¸ã§ã¯ãã®ããã·ã¥å¤ã¨ãªãã¾ãã
å³ã«ããã¨ããããªæãã§ãã
丸ã commit ãªãã¸ã§ã¯ãã§ãä¸è§ã tree ãªãã¸ã§ã¯ãã®ã¤ããã§ãã
commit ãªãã¸ã§ã¯ãããã©ã£ã¦ãé¢ç½ããªãã®ã§ãtree ãªãã¸ã§ã¯ãããã©ã£ã¦ã¿ã¾ãã
git cat-file -p ae59f12 ãå®è¡ããã¨ãä»åº¦ã¯
100644 blob 6f405dfa9459fb06055ed0a189e388a3dbff968a .gitignore 040000 tree 82e3a754b6a0fcb238b03c0e47d05219fbf9cf89 a 100644 blob c1711f47ec4b3d14afe4659859fae8207aeb9c3a hoge 100644 blob 0372cbe1ca0f901202f3de163ebcb9f593b4f6d3 hoge.txt 100644 blob acdc2b8d1e5e3c92d72c6fa52a47086129af72a5 piyo
ã®ãããªåºåãå¾ããã¾ãã
åè¡ã¯ããã® tree ãªãã¸ã§ã¯ãã«å«ã¾ãã tree ãªãã¸ã§ã¯ãã blob ãªãã¸ã§ã¯ãã§ãã
ãã®åºåã®ä¸åç®ã¯ããã¡ã¤ã«ã¢ã¼ããè¡¨ãæ°å¤ã§ããä»ã¯é¢ä¿ãªãã®ã§æ¾ç½®ãã¾ãã
äºåç®ã¯ããªãã¸ã§ã¯ãã®ç¨®é¡ã表ãã¾ãã
ä¸åç®ã¯ããã·ã¥å¤ã§ãååç®ããªãã¸ã§ã¯ãã®ååã§ãã
ããã¾ã§è¿½ã£ããã®ãå³ã«ããã¨ããããªæãã§ãã
åè§ã blob ãªãã¸ã§ã¯ãã®ã¤ããã§ãã
ããã« git cat-file -p 82e3a ãå®è¡ããã¨ã
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 .gitignore
ã¨ãªãã¾ããããã§ãããã·ã¥å¤ãåãã§ãããã¨ã«ããå©ç¹ã試ãã¦ã¿ã¾ãããã
ããªãã® Git ãªãã¸ããªã§ã空ã®ãã¡ã¤ã«ããªãã§ãããã®ã§ä½ããã³ããããã¦ã¿ã¦ãã ããã
ããã¦ãä»ã¾ã§èª¬æããæ¹æ³ã§ä¸ããã©ã£ã¦ã¿ã¦ãã ããã
ããªããä½ã£ã空ã®ãã¡ã¤ã«ãå«ã tree ãªãã¸ã§ã¯ãã cat-file ããã¨ãããã®ããã·ã¥å¤ã¨ä¸ã® .gitignore ã®ããã·ã¥å¤ (e69de...) ãæ¯ã¹ã¦ã¿ã¦ãã ãããåãã«ãªãã¯ãã§ãã
Subversion ã®ãããªãå
容ãèæ
®ããªããæç³»åã®ã¿ã«ãã£ã¦ã¤ããããé£çªã® ID ã§ã¯ããã¯ããã¾ããã
ã¾ãããã¡ã¤ã«åã tree ãªãã¸ã§ã¯ãã«æ ¼ç´ããã¦ããããããã¡ã¤ã«åã®å¤æ´ã«ãã£ã¦ blob ãªãã¸ã§ã¯ãã®ããã·ã¥å¤ãåè¨ç®ããå¿
è¦ã¯ããã¾ããã
ã·ã§ã¼ãã«ããã«æ»ã
ãã©ã³ãã®è©±
Git ã®ãã©ã³ãã«é¢ãã¦ã¯ãè£ã§ã©ãåãã¦ããã®ãã«é¢ãã¦æµããç¨åº¦ã ã£ãã®ã§ãããã¡ãã£ã¨è©³ããæ¸ãã¦ããã¾ãã
Git ã§ã®ãã©ã³ãã¯ãå®è£
ä¸ã¯ commit ãªãã¸ã§ã¯ãã®ããã·ã¥å¤ãä¿æãããã¡ã¤ã«ã«éãã¾ããã
ãã¡ã¤ã«èªä½ã¯ããã¼ã«ã«ãã©ã³ããªã .git/refs/heads/ 以ä¸ã«ããªã¢ã¼ããã©ã³ããªã .git/refs/remotes/ãªã¢ã¼ãã®åå/ 以ä¸ã«æ ¼ç´ããã¦ãã¾ãã
試ãã«ãå£ãã¦ããããªãã¸ããªãä½ã£ã¦ãé©å½ã«ä½åãã³ããããã¦ã¿ã¦ãã ããã
ä¾ãã°ãããªæãã§ãã
mkdir hoge cd hoge git init . echo hoge > hoge.txt git add . git commit -m "add hoge.txt" echo piyo > piyo.txt git add . git commit -m "add piyo.txt"
ãã®ç¶æ
ã§ãgit log -1 --oneline ã§ææ°ã®ã³ãããã®ããã·ã¥å¤ã確èªããã¨ãbc38b25 ã¨ãªãã¾ããã
ãã®ããã·ã¥å¤ã¯è¨å®ãå®è¡æéã«ãã£ã¦ç°ãªãã®ã§å¤èªä½ã«æå³ã¯ããã¾ããã
ããã§ .git/refs/heads/master ã®ä¸èº«ã¯ãbc38b25... ã¨ãªã£ã¦ãããææ°ã®ã³ãããã®ããã·ã¥å¤ã¨ä¸è´ãã¦ãã¾ãã
ã¨ããããããã®ããã·ã¥å¤ãã¯ãªãããã¼ããªã©ã«æ§ãã¦ããã¦ãã ããã
ã§ã¯ãä½ããã¡ã¤ã«ãä¿®æ£ãããªã追å ãããªããã¦ãæ°ããã³ããããä½ã£ã¦ããããä¸åº¦ git log -1 --oneline ã¨ã.git/refs/heads/master ã®ä¸èº«ã®ç¢ºèªãè¡ã£ã¦ãã ããã
ãã¡ã¤ã«ã®ä¸èº«ãæ´æ°ãããææ°ã®ã³ãããã®ããã·ã¥å¤ã¨ãã¯ãåããã®ã«ãªã£ã¦ããã®ã確èªã§ãã¾ãã
次ã«ãæ§ãã¦ãããããã·ã¥å¤ã§ .git/refs/heads/master ã®å
å®¹ãæ¸ãæããgit log -1 --oneline ãå®è¡ãã¦ã¿ã¦ãã ããã
ãã£ãè¡ã£ãã³ãããã§ã¯ãªããã²ã¨ã¤åã®ã³ãããã®ããã·ã¥å¤ã«æ»ãã¾ãã
ãã®ããã«ãGit ã§ã¯ãã©ã³ãã¯åãªãããã·ã¥å¤ãæ ¼ç´ãããã¡ã¤ã«ã¨ãã¦å®è£
ããã¦ããããããã©ã³ãã®ä½æãååã®å¤æ´ãåé¤ã¨ãã£ãæä½ã¯é常ã«é«éã«å®è¡ã§ãã¾ãã
ã¡ãªã¿ã«ãã¿ã°ã¯ .git/refs/tags/ 以ä¸ã«æ ¼ç´ããã¦ãããããåãååã®ãã©ã³ãã¨ã¿ã°ã¯åå±
å¯è½ã§ã (ç´ããããã®ã§ãããæ¹ãããã§ãã)ã
ã·ã§ã¼ãã«ããã«æ»ã
git-completionã®è©±ã__git_ps1ã®è©±
git-completion ãæå¹ã«ãªã£ã¦ããã¨ãgit ã®ãµãã³ãã³ãããã©ã³ãåããã®ä»ããããããtab ã§ããæãã«è£å®ãã¦ããã¾ãã
ããã«ã__git_ps1 ã¨ããç¾å¨ã® working tree ã®ç¶æ
ãåå¾ã§ãã颿°ã PS1 ã«è¨å®ãããã¨ã§ãç¾å¨ãã§ãã¯ã¢ã¦ããã¦ãããã©ã³ãåã常ã«ç¢ºèªã§ãã¾ãã
__git_ps1 ã¯ç¾å¨ãã§ãã¯ã¢ã¦ããã¦ãããã©ã³ãåã®ç¢ºèªã ãã§ãªãããã¨ãã° rebase æã« conflict ãçºçããå ´åã(ãã©ã³ãå|REBASE) ã®ãããªè¡¨è¨ã§ãããæãã¦ãããã¨ããæ©è½ãããã¾ãã
zsh ã®å ´å㯠id:clairvy (ãããªãã¨ããã) ããªãã¨ããã¦ãããã®ã§é ¼ãã«ãã¾ãããã
åå¼·ä¼ã§ã¯ Windows ã¦ã¼ã¶ã¯ TortoiseGit ã使ã£ã¦ãã¾ããããmsysgit ã¯ããã©ã«ãç¶æ
ã§ git-completion ãæå¹ã«ãªã£ã¦ãããããã __git_ps1 ãããæãã«è¨å®ããã¦ãããããæ£ç´ TortoiseGit ç¨åº¦ãªã使ããªãæ¹ãããã¨æãã¾ãã
TortoiseGit ã£ã¦ãTortoise ã£ã¦ååãé¢ãã¦ããã¨ããã ãã§ã¡ãã£ã¨ä½¿ãããããããªãã§ãããã
ã¾ãå
¨å¡ã«ã³ãã³ã使ãããã®ã¯ç¡çã¨ãã¦ããä»ã«ãã¾ããªé¸æè¢ã¯ããã¨æããã§ãããã»ã»ã»
ãã£ã¨ãTortoiseGit 大å«ããªã®ã§ãã®è¾ºã®è©±ã¯ããªããã¤ã¢ã¹ããã£ã¦ãã¨ãããã¨ã§ã²ã¨ã¤ã
ã·ã§ã¼ãã«ããã«æ»ã
ã³ãããã®æå®ã®è©±
ãªãã¸ã§ã³çªå·ãæããªã Git ã§ã¯ãããã³ããããæå®ããããã«ããã¤ãã®æ¹æ³ãããã¾ãã
- ããã·ã¥å¤ãç´æ¥æå®ãã
- ã¿ã°åãæå®ãã
- ãã©ã³ãåãæå®ãã
- ç¸å¯¾çã«æå®ãã
ãªã©ã§ãã
ãã®ä¸ã§ãç¸å¯¾çãªæå®ã¯è¨å·ãæ°åãåããã£ã¦ãã¯ããã®ãã¡ã¯åã£ä»ãã«ãããã®ã§ããã便å©ãªã®ã§ãã²è¦ãã¦ããã¾ãããã
ç¸å¯¾çãªæå®ã§ãã使ããã®ã«ã^n (n çªç®ã®è¦ª) 㨠~n (n ä¸ä»£åã®è¦ª) ãããã¾ãã
ããã¯ã©ã¡ããããã³ãããã®ãåãã®ã³ããããæããããéããåããã«ããã§ãããå³ã«ããã¨ããããããã§ãã
ãã®å³ã§ãããããã«ã^n ã«ããæå®ã¯è¦ªãããã¤ãåå¨ããå ´åã«è¦ªã鏿ããã¨ããç¶æ³ã§ä½¿ç¨ãããããmerge ã§ã¯ãªã rebase ãå¤ç¨ãããããªå ´åããã¾ã使ç¨ãããã¨ã¯ãªãã§ãããã
éã«ã~n ã«ããæå®ã¯ãç°¡åã«åã®ã³ãããã鏿ã§ããããã使ç¨ããé »åº¦ã¯é«ããªãã¾ãã
ãããã¯çµã¿åããããã¨ãã§ãããã¨ãã° master^2~3ã¨ããã°ãmaster ã®äºçªç®ã®è¦ªã鏿ããããããããã«ä¸ä¸ä»£ããã®ã¼ããã¨ãããã¨ãå¯è½ã§ãã
ã¾ããn ã 1 ã®å ´åçç¥ãããã¨ãã§ããã®ã§ãmaster^^^ ã¨ãmaster~~~ãmaster~3 ã¯ãã¹ã¦åãã³ããããæãã¾ãã
ã¡ãªã¿ã«ããã HEAD^ ã¨ããè¨è¿°ãè¦ããã¾ãããHEAD ã¯ç¾å¨ãã§ãã¯ã¢ã¦ããã¦ãããã©ã³ããæãã®ã§ãç¾å¨ã®ã²ã¨ã¤åãã¨ãããã¨ã«ãªãã¾ãã
ããã§ ~ ã§ã¯ãªã ^ ã使ããã¨ãå¤ãã®ã¯ãShift ãã¼ãæ¼ããªãã¦ãå
¥åã§ããããã ã¨åæã«æã£ã¦ãã¾ããUS é
åã¨ãã§ã©ããªã£ã¦ãã®ãã¯ç¥ããªãã§ãã
ã·ã§ã¼ãã«ããã«æ»ã
resetã®è©±
reset ã³ãã³ãã¯ãã¡ã¤ã«ãåå¥ã«æå®ãã reset ã¨ãã³ããããæå®ãã reset ã® 2 ã¤ãããã¾ãã
ã³ããããä½ãä¸ããããã«ä½¿ç¨ããããã¡ã¤ã«ãæå®ãã reset ã³ãã³ãã¯ãadd ã®éæä½ã¨è¦ãã¦ããã°ããã§ãããã
index ã« stage ããããã«ä½¿ç¨ãã addãindex ãã unstage ããããã«ä½¿ç¨ãã reset ã§ãã
ã³ããããæå®ãã reset ã¯ãä¸»ã«æ´å²ã®ä¿®æ£ããã©ã³ããç§»åãããããã«ä½¿ç¨ãã¾ãã
ãã®éãsoft/mixed/hard ã¨ãã£ããªãã·ã§ã³ãé¸ã¹ã¾ã (ããã©ã«ã㯠mixed) ãããããã¯ä»¥ä¸ã®ãããªéããããã¾ãã
- soft
- ãªãã¸ããªã®ç¶æ ã®ã¿ã対象㫠reset ãã
- mixed
- ãªãã¸ããªã®ç¶æ ã¨ãindex ã®ç¶æ ã対象㫠reset ãã
- hard
- ãªãã¸ããªã®ç¶æ ãindex ã®ç¶æ ãworking tree ã®ãã¹ã¦ã reset ãã
ãã®ãããªéãããããããåãªãã·ã§ã³ã¯ä»¥ä¸ã®ããã«ä½¿ãåããã¨è¯ãã§ãããã
- soft
- bare ãªãã¸ããªã§ã®æä½ã®ããã«ä½¿ç¨ãã
- mixed
- æ´å²ã®ä¿®æ£ã®ããã«ä½¿ç¨ãã
- hard
- ãã©ã³ããç§»åãããããã«ä½¿ç¨ãã
ããã§ããã©ã³ããç§»åããããã¨è¨ã£ã¦ããã®ã¯ããã©ã³ãã®è©±ã§ãã£ããããªæä½ãã³ãã³ãã§å®å
¨ã«è¡ã£ã¦ããã ãã§ãã
ããã¦ããªã»ãããã¨è¨ãèªæã«åãã¦ããã®ãã©ã³ããæãã³ããããæ¸ãæããã ãã§ãã®ã§ãç¾å¨ã®ã³ããããããæç³»åçã«å¾ã®ã³ãããã« reset ãããã¨ãå¯è½ã§ãã
ããã¾ã§ãre(åã³) + set(è¨å®ãã) ã®ã§ãã£ã¦ããªã»ãããã¿ã³ã®ãããªèéã®å©ããªãæä½ã§ã¯ãªããã¨ããç¹ã«ã¯æ³¨æãã¦ãã ããã
ã·ã§ã¼ãã«ããã«æ»ã
rebase 㨠merge ã®è©±
ãªãã彿¥ã¯ãmerge ããã¾ã㯠rebase ã§ããï¼ãã¿ãããªããªã§è©±ãããã§ããã©ãããå®å
¨ã«å人çãªæè¦ãªã®ã§ããã®è¾ºã¯ãããããé¡ããã¾ãã
rebase ã®æ¬ ç¹ã¨ãã¦ãé
ããã£ã¦ã®ã¯è¨ã£ãã®ã§ãããããä¸ã¤å¿ãã¦ã¾ããã
rebase ããçµæãå
é ã®ã³ãããã«é¢ãã¦ã¯æ£ããåãã¦ãã¦ããéä¸ã®ã³ããããå£ãã¦ãã¾ãã¨ããå¯è½æ§ããããã¨ã§ãã
ã¾ãããã®è¾ºã¯ tag ããããå©ç¨ãã¦ãããã¾ãåãã¨ãã確証ãããç¹ããæç¤ºãã¦ããã°ããã»ã©åé¡ã§ã¯ãªãããããªãããªããã¨ãæããªããããã¾ããã
ã·ã§ã¼ãã«ããã«æ»ã
å ¬éãããã®ã® rebase ã®è©±
å ¬éãããã®ã rebase ãã¦ã¯ãããªãããã¨ãã話ã¯ãããã§ãããããã¾ãã¡ããã¨èª¬æã§ããªãã£ãã®ã§èª¬æãããã¨æã£ãããPro Git ã«ããããããã¾ã¨ãããã¦ããã®ã§ãã¡ããã©ããã
ãã ããéçºã¡ã³ãã¼ãå°æ°ã§ããã¤å£°ãååã«è¡ãå±ããããªéçºç¾å ´ã®å ´åããã®ãããªæ··ä¹±ãçããããã«æ¸ã¾ããæ¹æ³ãããã¾ãã
ããç¹æ®ãªã±ã¼ã¹ãªã®ã§ãã®è©±ã¯ã¾ãæ©ä¼ãããã°ãããã¾ãåç´ã« bare ãªãã¸ããªã reset ãã¦ã¿ããªåå¾ãç´ããã¨ããã ãã®ãã®ã§ããã
ã·ã§ã¼ãã«ããã«æ»ã
stash ã®è©±
æåã«è¨ã£ã¦ããã¨ãstash ã¯å¥½ããããªãã§ãã
便å©ãªã®ã¯èªããã®ã§ããã失æããå ´åã®å¾©æ§ææ®µãå
¨ç¶è¦ããããªãä¸ã«é¢åã¨ããç¹ã§ããã¾ã使ãããã¯ãªãã
詳ããå¾©æ§æ¹æ³ã¯ã
git stash save で一時退避した変更を、誤って git stash clear で消してしまったときの回復法 - t-wadaの日記
ã«ä¸å¯§ã§ãããããã解説ãããã®ã§ããã¡ããåèã«ãã¦ãã ããã
ã§ãã§ãããstash ã§ããstash ã使ãå ´é¢ã¨ããã®ã¯ããã¨ãããããã£ã使¥ãç½®ãã¦ããã¦ãéã使¥ãããããï¼ãã¨ããå ´åãã»ã¨ãã©ã ã¨æãã¾ãã
ããã¦ããã§ stash ã使ãããã§ãããã¡ãã£ã¨å¾
ã£ã¦ãã ããããããã¨ãããã commit ãã¦ããã¾ãããï¼
commit ãã¦ããã°ããã»ã©ã®ãã¨ããªãéã使¥ã失ããã¨ã¯ãªãã§ããããã»ã©ã®ãã¨ãèµ·ãã£ãå ´å㯠stash ã使ã£ã¦ããå ´åã§ã使¥ã¯ç¡ã«å¸°ãã§ããã (ãã»ã©ã®ãã¨ã»ã»ã»ãªãã¸ããªãééã£ã¦æ¶ãã¡ããã¨ã)ã
ã¾ã Git ã«æ
£ããªããã¡ã¯ stash ã¯æè»½ã§ãã使ãã°ããã¨æãã®ã§ãããrebase ã reset ã使ãããªããããã«ãªã£ãããããã®ä½æ¥æ¶ããã¨çããªããã¨æãå ´å㯠stash ã§ã¯ãªã commit ãã¦ãããå¾ã§ reset ã commit --amend ãã¦ä¸æçãªã³ãããããã£ãã¨ããæ´å²ãæ¶ãã¦ãã¾ãã°ããã®ã§ãã
ãã®æ¹æ³ã ã¨ãä½ãæä½ããã¹ããå ´åã§ãããã¤ãã®ãã¼ã«ããã¤ãã®ããã«ä½¿ãã ãã§å¾©æ§ãå¯è½ã«ãªãã¾ãã
ã·ã§ã¼ãã«ããã«æ»ã
TortoiseGitãHGãSVN ã®è©±
大å«ã㪠TortoiseGit ã®è©±ã§ãã
æè¦ªä¼ã§ãã£ã話ãªãã§ãããTortoiseHG 㯠TortoiseSVN ã®ä½¿ãåæããããç¨åº¦é¢ããç¬èªã®é²åããã©ã£ã¦ããããã§ããç´ æ´ãããã§ããã
ä»åä¹
ãã¶ãã« TortoiseGit ã触ã£ã (ã¨ããã»ã©ã§ã¯ãªããè¦ã¦ãã ãã§ãã) ãã§ããã©ãTortoiseGit 㯠TortoiseSVN ã®ä½¿ãåæããã®ã¾ã¾ã«ãããã¨ããæ¹åæ§ãããããã¡ãªã¾ã¾ã§ããã
Git ããã¡ãã¨ä½¿ããããªããTortoiseGit ã§ã¯ãã¡ã§ããã³ãã³ãã§ä½¿ãããGitExtensions ãªã©ã®å¥ã®ããã³ãã¨ã³ãã使ãã¾ãããã
ã·ã§ã¼ãã«ããã«æ»ã
å ¨ä½ãéãã¦
仿´ã¨è¨ãã°ä»æ´ãªãã§ããã©ãéããã°ã©ããªæ¹ã«ã¯ãã£ã±ããªèª¬æããã¦ãã¾ã£ãããªãã¨ããã®ãä»åã®æå¤§ã®åçç¹ã§ããããããªããã
ããã°ã©ããªäººã«ã¯ãä¸èº«ã®è©±ããæ¹ããã¶ãåãããããã¨æã£ã¦çµæ§ãã£ã¼ããªè©±ã¨ãããã¦ãã¾ã£ããã§ããã©ããããããªã人ããä½è¨ã£ã¦ãã ããã¤ãç¶æ
ã«ãã¦ãã¾ã£ãããããªããã¨æãã¨ã»ã»ã»
ããã¡ãã£ã¨ãããä¸èº«ã®è©±ããªãã¦ã説æã§ããããã«ãªããªãã¨ãªããã¨çæãã¤ã¤ãä¸èº«ã®è©±ããªããªãªã¨ã³ããªæ¸ãã¦ãæç¹ã§å
ã¯ã¾ã ã¾ã è¦ããªãæãã§ãã
ããã¨ãããããã¨æ·±ãã¾ã§çªã£è¾¼ãã ããã§ Github é¨åå ¨ç¶ãããªãã£ãã¨ããç¹ãåçã§ããã»ã»ã»