ç§ã¯gitã®å匷ãšäœ¿çšãã»ãšãã©ã©ãã§ãè¡ã£ãŠããŸããã ãããããã®éã«ç§ã¯å€ãã®ããšãåŠã¶ããšãã§ããç§ã®çµéšãã³ãã¥ããã£ãšå
±æããããšæããŸãã
äž»ãªã¢ã€ãã¢ãäŒãããã®VCSããããžã§ã¯ãã®éçºã«ã©ã®ããã«åœ¹ç«ã€ãã瀺ããŸãã èªãã åŸã«è³ªåã«çããããããšãé¡ã£ãŠããŸãïŒ
- å¿
èŠãªéçºããã»ã¹ã«gitãã調æŽãã§ããŸããïŒ
- ãããŒãžã£ãŒãšé¡§å®¢ã¯ãã®ããã»ã¹ã«æºè¶³ããŸããïŒ
- éçºè
ã¯ç°¡åã«äœæ¥ã§ããŸããïŒ
- åå¿è
ã¯ããã«ããã»ã¹ã«åå ã§ããŸããïŒ
- ããã»ã¹ã¯æ¯èŒçç°¡åãã€è¿
éã«å€æŽã§ããŸããïŒ
ãã¡ãããåºæ¬ããå§ããŠããã¹ãŠãé çªã«è©±ãããšããŸãã ãããã£ãŠããã®èšäºã¯ãGitãå§ããã°ããã®äººãGitã䜿ããã人ã«ãšã£ãŠéåžžã«åœ¹ç«ã¡ãŸãã ããçµéšè±å¯ãªèªè
ã¯ãèªåèªèº«ã§äœãæ°ãããã®ãèŠã€ãããããšã©ãŒãææããããã¢ããã€ã¹ãå
±æããããããããããŸããã
èšç»ã®ä»£ããã«
éåžžã«é »ç¹ã«ãäœããå§ããããã«ãç§ã¯ããããã®è³æãå匷ããŸããããããã¯ç°ãªã人ãç°ãªãäŒç€Ÿãç°ãªãã¢ãããŒãã§ãã ããã¯ãã¹ãŠãäœããç§ã«é©ããŠãããã©ãããåæãç解ããã®ã«å€ãã®æéãå¿
èŠãšããŸããïŒ åŸã«ãæ®éçãªè§£æ±ºçããªãããšãç解ããããšã«ãªããšãããŒãžã§ã³ç®¡çã·ã¹ãã ãšéçºã®ããã«ãŸã£ããç°ãªãèŠä»¶ãçããŸãã
ãããã£ãŠãäž»ãªæé ã匷調ããŸãã
ç°å¢
åäœããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
- Git
- ã³ã³ãœãŒã«
- 奜ããªè»žã®äžã«ãã¹ãŠã眮ãæ¹æ³ãç¥ã£ãŠããã¢ãã¿ãŒã®å察åŽã®ç·
çŸåšã®ç°å¢ã¯Debian + KDE + Git + Bash + GitK + KDiff3ã§ãã
ã³ã³ãã¥ãŒã¿ãŒã«WindowsãèŠã€ãã£ãå ŽåãWindows + msysgitïŒgit-bashïŒ+ TortoiseGitãªã©ãã€ã³ã¹ããŒã«ãããŠããå¯èœæ§ãé«ãã§ãããã
ã³ã³ãœãŒã«ãéãå Žåã
git
ãèšè¿°ããŠãããååŸããŸãã
gitãã«ã usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] [-c name=value] [--help] <command> [<args>] The most commonly used git commands are: add Add file contents to the index bisect Find by binary search the change that introduced a bug branch List, create, or delete branches checkout Checkout a branch or paths to the working tree clone Clone a repository into a new directory commit Record changes to the repository diff Show changes between commits, commit and working tree, etc fetch Download objects and refs from another repository grep Print lines matching a pattern init Create an empty git repository or reinitialize an existing one log Show commit logs merge Join two or more development histories together mv Move or rename a file, a directory, or a symlink pull Fetch from and merge with another repository or a local branch push Update remote refs along with associated objects rebase Forward-port local commits to the updated upstream head reset Reset current HEAD to the specified state rm Remove files from the working tree and from the index show Show various types of objects status Show the working tree status tag Create, list, delete or verify a tag object signed with GPG See 'git help <command>' for more information on a specific command.
ããã§æºåå®äºã§ãã
å®éšããããšãæããªãã§ãã ãã
確ãã«ãã»ãšãã©ã®ããŒã ã¯ãã§ã«ã©ããã§çºèŠãããŠãããããã€ãã®èšäºã¯èªãŸããŠããã®ã§ãå§ããããšæã£ãŠããŸãããééã£ãããŒã ã«åå ããããäœããå£ãããšãæããŠããŸãã ãŸãã¯ãäœãç 究ãããŠããªããããããŸããã 次ã«ããããèŠããŠãããŠãã ããïŒ
ããªãã¯äœã§ãã§ããã©ããªã³ãã³ãã§ãå®è¡ã§ããå®éšãèšå®ããåé€ãå€æŽã§ããŸãã äž»ãªããšã¯git push
ãããªãããšã§ãã
ãã®ã³ãã³ãã®ã¿ããå€æŽãå¥ã®ãªããžããªã«è»¢éããŸãã ãã®æ¹æ³ã§ã®ã¿ãäœããå£ãããšãã§ããŸãã
å³å¯ã«èšãã°ã倱æããgit pushãä¿®æ£ã§ããŸãã
ãããã£ãŠããªããžããªãå®å
šã«è€è£œããŠåŠç¿ãéå§ã§ããŸãã
ãªããžããªã®æ§ç¯
ãŸããgitãªããžããªãšã¯äœããç解ããå¿
èŠããããŸããïŒ çãã¯éåžžã«ç°¡åã§ãããã¡ã€ã«ã®ã³ã¬ã¯ã·ã§ã³ã§ãã `.git`ãã©ã«ããŒã ããã¯åãªããã¡ã€ã«ã®ã³ã¬ã¯ã·ã§ã³ã§ããããã以äžã®ãã®ã§ã¯ãªãããšãç解ããããšãéèŠã§ãã çŽ20åãç§ã¯github / gitlabã§ã®æ¿èªã«é¢ããååã®åé¡ãèŠãŸããã ãããgitã·ã¹ãã ã®äžéšã§ãããšèããŠã圌ãã¯gitæ§æã®åé¡ãæ¢ããŠãããã€ãã®gitã³ãã³ããåŒã³åºããŸããã
ãããŠãããããåãªããã¡ã€ã«ã§ããå Žåãäœããã®æ¹æ³ã§ãããã«ã¢ã¯ã»ã¹ããããããèªã¿åããããã«æžã蟌ãããšãã§ããå¿
èŠããããŸããïŒ ã¯ãïŒ ç§ã¯ãããããã©ã³ã¹ããŒãããšåŒã³ãŸãã ããã¯ééã£ãŠãããããããŸããããèŠããŠãããšãšãŠã䟿å©ã§ããã ããæ£ãããªãã·ã§ã³ïŒãããŒã¿è»¢éãããã³ã«ãã æãäžè¬çãªãªãã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
- ãã¡ã€ã«-ãªããžããªãã¡ã€ã«ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãã
- SSH-sshãä»ããŠãµãŒããŒäžã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ããŸãã
- HTTPïŒSïŒ-éåä¿¡ãšããŠhttpã䜿çšããŸãã
ããã«å€ãã®ãªãã·ã§ã³ããããŸãã ã©ã®ãã©ã³ã¹ããŒãã䜿çšããããã¯é¢ä¿ãããŸããããã¡ã€ã«ãžã®èªã¿åãã¢ã¯ã»ã¹ãŸãã¯èªã¿åã/æžã蟌ã¿ã¢ã¯ã»ã¹ãããããšãéèŠã§ãã
ãããã£ãŠãgithubã䜿çšããŠãªããžããªãè€è£œã§ããããã°ã«ãã³ãããªãå Žåããã©ã³ã¹ããŒãã®åé¡ãçºçããŠããå¯èœæ§ããããŸãã
ç¹ã«ããã®ãããªã¯ããŒã³ãäœæããå ŽåïŒ
git clone git@github.com:user/repo.git
URLã¯ãã«å€ããã
git clone ssh://git@github.com:user/repo.git
ã€ãŸã SSHã䜿çšãããŠãããããåé¡ãæ¢ãå¿
èŠããããŸãã ååãšããŠãããã¯æ£ããèšå®ãããŠããªãããèŠã€ãããªãsshããŒã§ãã ãSSH Auth Key gitãã®æ¹åã«ã°ãŒã°ã«ã§æ€çŽ¢ããå¿
èŠããããŸããå®å
šã«å€§äººã®å Žåã¯ãäœãèµ·ãããã確èªããŠãã ããã
ssh -vvv git@github.com
ãã«ãã§ãµããŒããããŠãããããã³ã«ïŒGIT URLSã»ã¯ã·ã§ã³ïŒïŒ
git clone --help
ãªããžããªã¯ã¯ããŒã³åã§ããŸãããæåã«ãç§ãã¡èªèº«ã§éãã§ã¿ãŸãããïŒ
- ç¬èªã®ãªã¢ãŒããªããžããªãçºæããŸã
- éçºè
ïŒdev1ãšdev2ïŒã«ä»£ãã£ãŠããããã2ã€ã®ã¯ããŒã³ãäœæããŸããã

ãªããžããªèªäœã«å ããŠã
äœæ¥ãããã¡ã€ã«ãä¿åããã
ã¯ãŒã¯ã¹ããŒã¹ããã
ãŸã ã ãªããžããªèªäœïŒ.gitãã©ã«ããŒïŒãååšããã®ã¯ããã®ãã©ã«ããŒã§ãã ãµãŒããŒã«äœæ¥ãã¡ã€ã«ã¯å¿
èŠãªãããã裞ã®ãªããžããªã®ã¿ãããã«ä¿åãããŸãã
1ã€äœæããŸãããïŒãããã¡ã€ã³ã®ãã¹ããªããžããªã«ãªããŸãïŒã
$ mkdir git-habr
次ã«ãéçºè
ã«ä»£ãã£ãŠã¯ããŒã³ãäœæããŸãã ãµãŒããŒã§ã®äœæ¥äžã«ååšããªãèŠåã1ã€ã ããããŸãããªããžããªãããŒã«ã«ã§åãããŒãã£ã·ã§ã³ã«ããããšãèªèããgitã¯ããªã³ã¯ãäœæããå®å
šãªã³ããŒãäœæããŸããã ãŸãã調æ»ã«ã¯å®å
šãªã³ããŒãå¿
èŠã§ãã ãããè¡ãã«ã¯ã
--no-hardlinks
䜿çšãããããããã³ã«ãæ瀺çã«æå®ããŸãã
$ git clone --no-hardlinks origin dev1 Cloning into 'dev1'... warning: You appear to have cloned an empty repository. done. $ git clone --no-hardlinks origin dev2 Cloning into 'dev2'... warning: You appear to have cloned an empty repository. done.
çµè«ïŒ3ã€ã®ãªããžããªããããŸãã ããã«ã¯äœããããŸãããã圌ãã¯æºåãã§ããŠããŸãã
GITã¹ã¿ãŒã
ã¹ãã£ã³ãã«ïŒ é°è¬ïŒ 調æ»ïŒ
- Gitã¯ãã©ã«ããŒãä¿åããŸãã
- Gitã¯ãã¡ã€ã«ãä¿åããŸãã
- ãªããžã§ã³ã«ã¯ã·ãªã¢ã«çªå·ããããŸãã
- ãšãã£ã·ã§ã³ïŒç·šéãã³ãããïŒãæ£åžžã«æ©èœããªãå ŽåããããŸã
- Gitã«ã¯ãã©ã³ãããããŸãã* ïŒå°ããªæ³šæäºé
ããããŸãïŒ
ãªã¹ããããã«ç¶ããããšãã§ããŸãããããã¯ãã§ã«èªç¶ãªè³ªåãããã®ã«ååã§ãïŒ
ã©ã®ããã«æ©èœããŸããïŒ
ãã®ãã¹ãŠãã©ã®ããã«ç解ããèšæ¶ããããšãã§ããŸããïŒ
ãããè¡ãã«ã¯ããã³ãããã®äžãèŠãŠãã ããã äžè¬çãªçšèªã§ãã¹ãŠãèæ
®ããŠãã ããã
ã®ããã ã»ãŒãã³ãããã®äž
Gitã¯ãã³ããããããã¹ãŠã®ãã¡ã€ã«ã®å
容ãä¿åããŸãïŒåãã¡ã€ã«ã®å
容ããã£ã¹ããããªããžã§ã¯ãã«ä¿åããŸãïŒã ãã¡ã€ã«ãå€æŽãããŠããªãå Žåãå€ããªããžã§ã¯ãã䜿çšãããŸãã ãããã£ãŠã
å€æŽããããã¡ã€ã«ã®ã¿ãæ°ãããªããžã§ã¯ãã®åœ¢ã§ã³ãããã«åé¡ãããŸããããã«ãããå€ãã®ãã£ã¹ã¯å®¹éãç¯çŽãããä»»æã®ã³ãããã«ãã°ããåãæ¿ããããšãã§ããŸãã
ããã«ããããããã®é¢çœãããšãããã§æ©èœããçç±ãç解ã§ããŸãã
$ git init /tmp/test Initialized empty Git repository in /tmp/test/.git/ $ cd /tmp/test $ cp ~/debian.iso .
ã¯ããæçœãªå¿
èŠãªãã«ãéãããã¡ã€ã«ããã€ããªãªã©ãä¿åããã¹ãã§ã¯ãããŸããã ãããã¯æ°žä¹
ã«ããã«æ®ãããªããžããªã®ãã¹ãŠã®ã¯ããŒã³ã«ååšããŸãã
åã³ãããã«ã¯ãè€æ°ã®ç¥å
ã³ããããšè€æ°ã®åã³ããããå«ããããšãã§ããŸãã

ãã®ããªãŒããŸãã¯ã°ã©ãã®ä»»æã®ãã€ã³ãã«ç§»åïŒç¶æ
ã埩å
ïŒã§ããŸãã ãããè¡ãã«ã¯ãgit checkoutã䜿çšããŸãã
git checkout <commit>
2ã€ä»¥äžã®ã³ãããã1ã€ã«ããŒãžããããšã¯ãããŒãžïŒ2ã€ä»¥äžã®å€æŽã»ãããçµåããïŒã§ãã
ååå²ã¯ãããã€ãã®ããªãšãŒã·ã§ã³ã®å€èŠ³ã§ãã
ã¡ãªã¿ã«ããã¡ã€ã«/ãã©ã«ãããããžã§ã¯ãã®äžéšãªã©ã«ã¿ã°ãäœæããããšã¯äžå¯èœã§ããããšã«æ³šæããŠãã ããã æ¡ä»¶ã¯å®å
šã«ã®ã¿åŸ©å
ãããŸãã ãããã£ãŠãProject1ãProject2ãªã©ãè¿œå ããã«ããããžã§ã¯ããå¥ã®ãªããžããªã«ä¿ç®¡ããããšããå§ãããŸãã ãã æ ¹ã«ã
ããŠãæãžã äžã«æžããïŒ
Gitã«ã¯ãã©ã³ãããããŸãã* ïŒå°ããªæ³šæäºé
ããããŸãïŒ
ã°ã©ãã圢æããå€ãã®ã³ãããããããŸãã 芪ã³ãããããä»»æã®åã³ããããžã®ãã¹ãéžæãããã®ã³ãããã®ãããžã§ã¯ãã®ç¶æ
ãååŸããŸãã ãèšæ¶ããã³ãããããã«ã¯ããããžã®ååä»ããã€ã³ã¿ãŒãäœæã§ããŸãã
ãã®ãããªååä»ããã€ã³ã¿ãŒã¯ãã©ã³ãã§ãã ã¿ã°ãåæ§ã§ãã `HEAD`ã¯åãåçã§åäœããŸã-çŸåšã®äœçœ®ã瀺ããŸãã æ°ããã³ãããã¯ãçŸåšã®ãã©ã³ãã®ç¶ç¶ã§ãïŒHEADãèŠãå Žæãšåãã§ãïŒã
ãã€ã³ã¿ãŒã¯ãã¿ã°ã§ãªãå Žåãä»»æã®ã³ãããã«èªç±ã«ç§»åã§ããŸãã ãã®ç®çã®ããã«ãã¿ã°ã¯ã³ããããäžåºŠã ãèšæ¶ããã©ãã«ã移åããªãããã«ããŸãã ãã ããåé€ããããšã¯ã§ããŸãã
ãããããgitã§äœæ¥ãããšãã«åããŠçè«ããç¥ãå¿
èŠãããã®ã¯ããã ãã§ãããã ããã§ãæ®ãã®éšåã¯ããç解ãããããªãã¯ãã§ãã
çšèª
ã€ã³ããã¯ã¹ -èšé²ãããå€æŽã®é åãã€ãŸã ãªããžããªã«ä¿åããããã«æºåãããã¹ãŠã®ãã®ã
commit-ãªããžããªã«éä¿¡ãããå€æŽã
HEADã¯ãçŸåšã®ã³ããããžã®ãã€ã³ã¿ã§ãã
master-ããã©ã«ãã®ãã©ã³ãåãããã¯ç¹å®ã®ã³ããããžã®ãã€ã³ã¿ã§ããããŸã
origin-ããã©ã«ãã§ã®ãªã¢ãŒããªããžããªã®ååïŒå¥ã®ãã®ãæå®ã§ããŸãïŒ
ãã§ãã¯ã¢ãŠã -ãªããžããªããç¶æ
ãååŸããŸãã
ç°¡åãªç·šé
åžžã«ããªãã®æå
ã«ããã¹ã2ã€ã®ããšããããŸãïŒ
- git status
- gitk
ããªããäœãééã£ãããšããããæ··ä¹±ãããäœãèµ·ãã£ãŠããã®ãããããªã-ãããã®2ã€ã®ããŒã ãããªããå©ããŸãã
git status
ãªããžããªïŒäœæ¥ã³ããŒïŒã®ã¹ããŒã¿ã¹ãšçŸåšã®å Žæã衚瀺ããŸãã
gitk
ã¯ãã°ã©ãã衚瀺ããã°ã©ãã£ã«ã«ãŠãŒãã£ãªãã£ã§ãã ããŒãšããŠããã©ã³ãã®ååãŸãã¯
--all
ãæž¡ããŠãã¹ãŠã衚瀺ããŸãã
å
ã»ã©äœæãããªããžããªã«æ»ããŸãããã ããã«ã1人ã®éçºè
ãdev1 $ã§äœæ¥ãã2人ç®ã®éçºè
ãdev2 $ã§äœæ¥ããããšãããŒã¯ããŸãã
README.mdãè¿œå ããŸãã
dev1$ vim README.md dev1$ git add README.md dev1$ git commit -m "Init Project" [master (root-commit) e30cde5] Init Project 1 file changed, 4 insertions(+) create mode 100644 README.md dev1$ git status
ã¿ããªãšå
±æããŸãã ãããã空ã®ãªããžããªãè€è£œãããããããã©ã«ãã§ã¯gitã¯ã³ããããè¿œå ããå Žæãç¥ããŸããã
圌ã¯ãããæããŠãããŸãïŒ
dev1$ git push origin No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'. fatal: The remote end hung up unexpectedly error: failed to push some refs to '/home/sirex/proj/git-habr/origin' dev1$ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 239 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] master -> master
2çªç®ã®éçºè
ã¯ããã«ãå®è¡ããããšã§ãããã®å€æŽãååŸã§ããŸãã
dev2$ git pull remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From /home/sirex/proj/git-habr/origin * [new branch] master -> origin/master
ããã«ããã€ãã®å€æŽãè¿œå ããŸãã
dev1(master)$ vim README.md dev1(master)$ git commit -m "Change 1" -a dev1(master)$ vim README.md dev1(master)$ git commit -m "Change 2" -a dev1(master)$ vim README.md dev1(master)$ git commit -m "Change 3" -a
äœãããã®ãèŠãŠã¿ãŸãããïŒgitkãå®è¡ïŒïŒ
é衚瀺ã®ããã¹ã
æåã®ã³ãããããã€ã©ã€ãããŸããã äžããäžã«é çªã«ç§»åãããšããªããžããªãã©ã®ããã«å€åãããã確èªã§ããŸãã
@@ -2,3 +2,4 @@ My New Project -------------- Let's start +Some changes
@@ -3,3 +3,5 @@ My New Project Let's start Some changes +Some change 2 +
@@ -2,6 +2,5 @@ My New Project -------------- Let's start -Some changes -Some change 2 +Some change 3
ãããŸã§ãã³ããããæåŸã«è¿œå ããŸããïŒ
ãã¹ã¿ãŒã¯ ïŒã ãã ããREADME.mdã®å¥ã®ããŒãžã§ã³ãè¿œå ã§ããŸãã ãããŠãã©ãããã§ãã§ããŸãã ããšãã°ãæåŸã®ã³ããããæ°ã«å
¥ãããå¥ã®ãªãã·ã§ã³ãè©ŠããŠããŸãã åã®ãã€ã³ãã§ãã©ã³ããã€ã³ã¿ãŒãäœæããŸãã ãããè¡ãã«ã¯ãgit logãŸãã¯gitkãéããŠã³ãããIDãåŠç¿ããŸãã 次ã«ããã©ã³ããäœæããŠåãæ¿ããŸãïŒ
dev1(master)$ git branch <branch_name> <commit_id>
GUIã奜ããªäººã«ã¯ãããã«ç°¡åãªãªãã·ã§ã³ããããŸããå³ããŠã¹ãã¿ã³ã§æ£ããã³ããããéžæ-> "æ°ãããã©ã³ããäœæ"ã
衚瀺ããããã©ã³ããã¯ãªãã¯ãããšããã®ãã©ã³ãã¢ã€ãã ããã§ãã¯ã¢ãŠããããŸãã ãã©ã³ãã«ãv2ããšããååãä»ããŸããã
ãã¹ããå€æŽããŸãããïŒ
dev1(v2)$ vim README.md dev1(v2)$ git commit -m "Ugly changes" -a [v2 75607a1] Ugly changes 1 file changed, 1 insertion(+), 1 deletion(-)
次ã®ããã«ãªããŸãã

ããã§ãã©ãããã§ããã©ã³ããäœæãããæ¹æ³ãšããã®å±¥æŽãã©ã®ããã«å€åããããããããŸããã
é«éå·»ãæ»ã
確ãã«ãããªãã¯ãã§ã«
fast-forward ã
rebase ã
merge mergeãšããèšèã«åºäŒã£ãŠããŸãã ãããã®æŠå¿µã«å¯ŸåŠããæãæ¥ãŸããã ç§ã¯ãªããŒã¹ã䜿çšããŸããã誰ããããŒãžããã ãã§ãã ãªããŒã¹ãšããŒãžã®ããŒãã¯ãããããããŸãã èè
ã¯ãã°ãã°ãèªåã®æ¹æ³ãããè¯ãããã䟿å©ã§ãããšçŽåŸãããããšããŸãã ç§ãã¡ã¯éã«è¡ããŸãïŒãããäœã§ãããã©ã®ããã«æ©èœããããç解ããŸãã ãã®åŸãã©ã®ãªãã·ã§ã³ãã©ã®ã±ãŒã¹ã§äœ¿çšããããããã«æããã«ãªããŸãã
ãããŸã§ã®ãšããã1ã€ã®ãªããžããªã®å¶éå
ã§ããã©ã³ããäœæããŸãããã¡ã€ã«ãäœæãããªããžããªã«é
眮ããæ°ãããã€ã³ããããã¡ã€ã«ã®2ã€ã®ããªã¢ã³ããäœæãããã¹ãŠããã¹ã¿ãŒã«çµåããããšããŸãã
dev1(v2)$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 3 commits.
次ã®å
容ã§collider.init.shãã¡ã€ã«ãäœæããŸãã
æ°ãããã©ã³ãã§éçºãè¿œå ãã³ããããéå§ããŸãã
dev1(master)$ git add collider.init.sh dev1(master)$ git commit -m "Added collider init script" [master 0c3aa28] Added collider init script 1 file changed, 11 insertions(+) create mode 100755 collider.init.sh dev1(master)$ git checkout -b collider/start
git checkout -b <branch_name>ã¯ãçŸåšäœçœ®ãžã®ãã€ã³ã¿ãŒïŒbranchïŒ<branch_name>ãäœæãïŒçŸåšäœçœ®ã¯ç¹å¥ãªHEADãã€ã³ã¿ãŒã䜿çšããŠè¿œè·¡ãããŸãïŒãããã«åãæ¿ããŸãã
ãŸãã¯åã«ïŒçŸåšã®å Žæããæ°ãããã©ã³ããäœæããããã«ãããç¶è¡ããŸãã
ãã©ã³ãåã«ã/ãæåã䜿çšããããšã¯çŠããããŠããªãããšã«æ³šæããŠãã ããããã ãã泚æãå¿
èŠã§ãã ã/ããŸã§ã®ååã®ãã©ã«ãããã¡ã€ã«ã·ã¹ãã ã«äœæãããŸãã ãã©ã«ããŒãšåãååã®ãã©ã³ããååšããå Žåããã¡ã€ã«ã·ã¹ãã ã¬ãã«ã§ç«¶åãçºçããŸãã
devãã©ã³ãããã§ã«ããå Žåã
dev / testãäœæã§ããŸããã
ãŸãã
dev / testã
ããã° ã
dev / whateverãäœæã§ããŸããã
devã ãã§ã¯ã§ããŸããã
ãã®ããã2ã€ã®ãã©ã³ã
collider / startãš
collider / terminateãäœæããŸããã æ··ä¹±ããïŒ
gitk-æå©ã«
ãã¹ãŠ ïŒ

ã芧ã®ãšãããããæç¹ã§3ã€ã®ãã€ã³ã¿ãŒïŒãã©ã³ãïŒããããã³ãããã®å€æŽã¯æ¬¡ã®ãšããã§ãã
@@ -0,0 +1,11 @@ +#!/bin/sh + + +USER=collider + + +case $1 in + *) + echo Uknown Action: $1 + ;; +esac
次ã«ãåãã©ã³ãã§ãã³ã©ã€ããŒãèµ·åããã³ç Žæ£ããã³ãŒããèšè¿°ããŸãã ã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ã¯ããã次ã®ãšããã§ãã
dev1(collider/start)$ vim collider.init.sh dev1(collider/start)$ git commit -m "Added Collider Start Function" -a [collider/start d229fa9] Added Collider Start Function 1 file changed, 9 insertions(+) dev1(collider/start)$ git checkout collider/terminate Switched to branch 'collider/terminate' dev1(collider/terminate)$ vim collider.init.sh dev1(collider/terminate)$ git commit -m "Added Collider Terminate Function" -a [collider/terminate 4ea02f5] Added Collider Terminate Function 1 file changed, 9 insertions(+)
è¡ãããå€æŽã³ã©ã€ããŒ/ã¹ã¿ãŒã @@ -3,8 +3,17 @@ USER=collider +do_start(){ + echo -n "Starting collider..." + sleep 1s + echo "ok" + echo "The answer is 42. Please, come back again after 1 billion years." +} case $1 in + start) + do_start + ;; *) echo Uknown Action: $1 ;;
ã³ã©ã€ããŒ/çµäº @@ -3,8 +3,17 @@ USER=collider +do_terminate() { + echo -n "Safely terminating collider..." + sleep 1s + echo "oops :(" + +} case $1 in + terminate) + do_terminate + ;; *) echo Uknown Action: $1 ;;
ãã€ãã®ããã«ã
gitkã§ç¢ºèªããŠã¿ãŸãããã

éçºãå®äºãããã¹ãŠã®å€æŽããã¹ã¿ãŒã«äžããå¿
èŠããããŸãïŒäœãã§ããªãå€ãã³ã©ã€ããŒããããŸãïŒã äžèšã®ããã«ã2ã€ã®ã³ããããããŒãžããããšã¯
mergeã§ãã ãããã
ãã¹ã¿ãŒãã©ã³ãã
ã³ã©ã€ããŒ/ã¹ã¿ãŒããšã©ã®ããã«ç°ãªãã®ãããããŠãããã®çµåïŒåèšïŒãååŸããæ¹æ³ã«ã€ããŠèããŸããããïŒ ããšãã°ããããã®ãã©ã³ãã®äžè¬çãªã³ãããã
ååŸã ã
masterã®ã¿ã«é¢é£ããã³ããããè¿œå ããŠããã
collider / startã®ã¿ã«é¢é£ããã³ããããè¿œå ã§ããŸãã ç§ãã¡ã¯ã©ãã§ããïŒ äžè¬çãªã³ããããããã
ãã¹ã¿ãŒã³ãããã®ã¿-ãããã
ã³ã©ã€ããŒ/ã¹ã¿ãŒãã®ã¿-ããããŸãã ã€ãŸã ãããã®ãã©ã³ããããŒãžããã«ã¯ã
master +
collider / startããã³ãããããŸãã ãããã
ã³ã©ã€ããŒ/ã¹ã¿ãŒãã¯
ãã¹ã¿ãŒ +
ã³ã©ã€ããŒ/ã³ãããã®ã³ãããã§ãïŒ åãããšïŒ ã€ãŸã äœãããªãïŒ ãã©ã³ãã®ããŒãž-ããã¯
ã³ã©ã€ããŒ/ã¹ã¿ãŒãã§ãïŒ
ç¹°ãè¿ããŸãããæåã®ã¿ã§ãç解ãããããªãããšãé¡ã£ãŠããŸãã
ãã¹ã¿ãŒ= C1 + C2 + C3
ã³ã©ã€ããŒ/ã¹ã¿ãŒã=ãã¹ã¿ãŒ+ C4 = C1 + C2 + C3 + C4
master + collider / start = General_commitïŒmasterãcollider / startïŒ+ Only_yïŒmasterïŒ+ Only_yïŒcollider / startïŒ=ïŒC1 + C2 + C3ïŒ+ïŒNULLïŒ+ïŒC4ïŒ= C1 + C2 + C3 + C4
ãããã©ã³ããå¥ã®ãã©ã³ãã«ã暪ããã£ãŠãããå Žåããã§ã«å¥ã®ãã©ã³ãã«å
¥ãããã«ãªã£ãŠãããããŒãžã®çµæã¯2çªç®ã®ãã©ã³ãã«ãªããŸãã å€ãã³ãããããæ°ããã³ãããã«å±¥æŽãå·»ãæ»ãã ãã§ãã ãã®å·»ãæ»ãïŒäœãããå¿
èŠã®ãªãçµåïŒã¯ãæ©éããšåŒã°ããŸãã
ãªãæ©éããè¯ãã®ã§ããïŒ
- ããŒãžãããšããäœãããå¿
èŠã¯ãããŸãã
- ããã«ãèªåé¢é£ä»ããä¿èšŒãããŸã
- 競åã¯äžå¯èœã§ããã決ããŠçºçããŸãã
- ã¹ããŒãªãŒã¯ïŒé¢é£æ§ããªããã®ããã«ïŒç·åœ¢ã®ãŸãŸã§ããã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ç解ããããããšãå€ã
- æ°ããã³ãããã¯è¡šç€ºãããŸãã
æ©éããå¯èœãªãã®ããã°ããèŠã€ããæ¹æ³ ãããè¡ãã«ã¯ãçµã¿åãããŠ1ã€ã®è³ªåã«çããå¿
èŠããã2ã€ã®ãã©ã³ãã®gitkãèŠãŠãã ãããäžããïŒäžããäžãžïŒã ã移åããå Žåããã©ã³ãAããBãžã®çŽæ¥ãã¹ããããŸãã ã¯ãã®å Žåãæ©éããè¡ãããŸãã
çè«çã«ã¯æããã§ããå®éã«è©ŠããŠã¿ãŠãå€æŽã
ãã¹ã¿ãŒã«æž¡ããŸãã
dev1(collider/terminate)$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 4 commits. dev1(master)$ git merge collider/start Updating 0c3aa28..d229fa9 Fast-forward
çµæïŒãã€ã³ã¿ãå
ã«é²ã¿ãŸããïŒïŒ

çµ±äž
次ã«ãå€æŽã
ã³ã©ã€ããŒ/ã¿ãŒãããŒããã
ååŸããŸã ã ãããããããŸã§èªãã 人ïŒçµå±èªãã§ãã¯ãïŒïŒïŒã¯ãçŽæ¥ã®éã¯ãªãããšã«æ°ä»ãã§ãããã æ©éããèŠæ±ããããã«gitãè©ŠããŠã¿ãŸãããïŒ
dev1(master)$ git merge --ff-only collider/terminate fatal: Not possible to fast-forward, aborting.
äºæ³ãããããšã§ãã ããŒãžããã ãã§ãïŒ
dev1(master)$ git merge collider/terminate Auto-merging collider.init.sh CONFLICT (content): Merge conflict in collider.init.sh Automatic merge failed; fix conflicts and then commit the result.
èè€ãããããšãå¬ããã§ãã éåžžããã®æç¹ã§ãäžéšã®äººã¯è¿·åã«ãªããGoogleã§äœããã¹ãããå°ããŸãã
éå§ããã«ã¯ïŒ
åãè¡ã§å€æŽãè¡ããã2ã€ä»¥äžã®ã³ããããçµåããããšãããšã競åãçºçããŸãã ãããŠä»ãgitã¯äœããã¹ãããç¥ããŸãããæåã®ãªãã·ã§ã³ãéžæãããã2çªç®ã®ãªãã·ã§ã³ãéžæããããå€ããªãã·ã§ã³ãæ®ããããã¹ãŠãåé€ããŸãã
ãã€ãã®ããã«ãæãå¿
èŠãª2ã€ã®ããŒã ã¯ç§ãã¡ãå©ããããã«æ¥ãã§ããŸãïŒ
dev1(master)$ git status

ç§ãã¡ã¯
masterã«ããŸããHEADã¯åããã®ãæããã³ããããããã«è¿œå ãããŸãã
ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
äž¡æ¹ã®ãªãã·ã§ã³ãå¿
èŠã§ãããæåã§çµåããããããŸãããïŒ ããã§ã¯ããã¹ãŠã®ããŒãžããŒã«ã圹ç«ã¡ãŸãã
競åã解決ããæãç°¡åãªæ¹æ³ã¯ã
git mergetoolã³ãã³ããåŒã³åºãããšã§ãã äœããã®çç±ã§ã誰ãããã®ãããªããŒã ã«ã€ããŠç¥ã£ãŠããããã§ã¯ãããŸããã
圌女ã¯æ¬¡ã®ãããªããšãããŸãã
- diffãŸãã¯mergeããã°ã©ã ã®éžæãèŠã€ããŠæäŸãã
- ãã¡ã€ã«filename.origïŒããŒãžãè©Šã¿ãåã®ãã¡ã€ã«ïŒãäœæããŸã
- ãã¡ã€ã«filename.baseïŒäœæããããã¡ã€ã«ïŒãäœæããŸã
- ãã¡ã€ã«filename.remoteãäœæããŸãïŒå¥ã®ãã©ã³ãã§å€æŽãããããïŒ
- ãã¡ã€ã«filename.localãäœæããŸãïŒå€æŽãããšããïŒ
- 競åã解決ããåŸããã¹ãŠããã¡ã€ã«åã§ä¿åãããŸã
ç§éã¯è©Šã¿ãŸãïŒ
dev1(master)$ git mergetool merge tool candidates: opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 emerge vimdiff Merging: collider.init.sh Normal merge conflict for 'collider.init.sh': {local}: modified file {remote}: modified file Hit return to start merge resolution tool (kdiff3):
å€æŽãåã競åã®å Žæã«ãã£ããšããäºå®ã«ãããå€ãã®ããšãèµ·ãããŸããã ãããã£ãŠãç§ã¯ã©ãã§ãæåã®ãªãã·ã§ã³ãåãã2çªç®ã®ãªãã·ã§ã³ãæåã®ãªãã·ã§ã³ã®çŽåŸã«ã³ããŒããŸããããguiã䜿çšãããšéåžžã«ç°¡åã§ãã çµæã¯æ¬¡ã®ãšããã§ããäžéšã«ãã¡ã€ã«ãªãã·ã§ã³ããããäžéšã«ãŠããªã³ããããŸãïŒå質ã«ã€ããŠã¯ç³ãèš³ãããŸããïŒã

çµæãä¿åãããŠã£ã³ããŠãéããŠã³ãããããçµæã確èªããŸãã

ä»ã®2ã€ã®çµåã§ããæ°ããã³ããããäœæããŸããã ãã®ããã®çŽæ¥çãªéããªãã£ããããæ©éãã¯è¡ãããŸããã§ãããã¹ããŒãªãŒã¯å°ãæ··ä¹±ãå§ããŸããã ããŒãžãæ¬åœã«å¿
èŠãªå ŽåããããŸãããé床ã«è€éãªã¹ããŒãªãŒã圹ã«ç«ã¡ãŸããã
å®éã®ãããžã§ã¯ãã®äŸã次ã«ç€ºããŸãã
ãã¡ãããããã¯ãã¡ã§ãïŒ ãããããéçºã¯äžŠè¡ããŠè¡ãããæ©éãã¯ãããŸããããšããªãã¯èšããŸããïŒ æãéããããŸãïŒ
åç·š
ã¹ããŒãªãŒãçŸãããã€ã¬ã¯ãã«ä¿ã€ââããã«äœãã§ããŸããïŒ ãã©ã³ããååŸããŠãå¥ã®ãã©ã³ãã§åæ§ç¯ã§ããŸãïŒ ã€ãŸã ãã©ã³ããæ°ããéå§ç¹ã«åãããã¹ãŠã®ã³ãããã1ã€ãã€åçããŸãã
ãã®ããã»ã¹ã¯ãªããŒã¹ãšåŒã°ããŸããã³ãããã¯ãåæ§ç¯ãããã©ã³ãã®ç¶ç¶ãšãªããŸããããããã°ãç©èªã¯ã·ã³ãã«ã§ç·åœ¢ã«ãªããŸãããããŠãæ©éããå¯èœã«ãªããŸããèšãæããã°ããããã©ã³ãããå¥ã®ãã©ã³ããžã®å€æŽã®å±¥æŽãç¹°ãè¿ããŸããããããå¥ã®ãã©ã³ããååŸããŠåãå€æŽãåäœæãããã®ããã«ããŸããææ°ã®å€æŽãå
ã«æ»ããŸããæãç°¡åãªæ¹æ³ã¯ããã¹ã¿ãŒãã€ã³ã¿ãŒã以åã®ç¶æ
ã«æ»ãããšã§ãã merge-commitãäœæããæ£ç¢ºã«masterã移åããŸããããããã£ãŠããããæ»ãå¿
èŠããããŸããåãã³ããããæãŸããïŒãããŠå Žåã«ãã£ãŠã¯éèŠïŒããšããããŸãããã®çµæãããŒãžã³ãããã¯ãã€ã³ã¿ãŒãªãã§æ®ããã©ã®ãã©ã³ãã«ãå±ããŸãããgitk
ãŸãã¯ã³ã³ãœãŒã«ã䜿çšããŠããã€ã³ã¿ãŒã移åããŸããcollider / startãã©ã³ãã¯ãã§ã«ã³ããããæããŠããã®ã§ããã®IDãæ¢ãå¿
èŠã¯ãããŸãããããã©ã³ãåã䜿çšã§ããŸãïŒããã¯åãããšã§ãïŒïŒ dev1(master)$ git reset --hard collider/start HEAD is now at d229fa9 Added Collider Start Function
merge-commitã¯ã©ããªããŸãããïŒ(), . Git , , .. , . , git garbage collector .
, .
git reflog . , (
HEAD ). , id , checkout ( ).
( , ):
d229fa9 HEAD@{0}: reset: moving to collider/start 80b77c3 HEAD@{1}: commit (merge): Merged collider/terminate d229fa9 HEAD@{2}: merge collider/start: Fast-forward 0c3aa28 HEAD@{3}: checkout: moving from collider/terminate to master 4ea02f5 HEAD@{4}: commit: Added Collider Terminate Function 0c3aa28 HEAD@{5}: checkout: moving from collider/start to collider/terminate d229fa9 HEAD@{6}: commit: Added Collider Start Function 0c3aa28 HEAD@{7}: checkout: moving from collider/launch to collider/start 0c3aa28 HEAD@{8}: checkout: moving from collider/terminate to collider/launch 0c3aa28 HEAD@{9}: checkout: moving from collider/stop to collider/terminate 0c3aa28 HEAD@{10}: checkout: moving from collider/start to collider/stop 0c3aa28 HEAD@{11}: checkout: moving from master to collider/start 0c3aa28 HEAD@{12}: commit: Added collider init script 41f0540 HEAD@{13}: checkout: moving from v2 to master 75607a1 HEAD@{14}: commit: Ugly changes 55280dc HEAD@{15}: checkout: moving from master to v2 41f0540 HEAD@{16}: commit: Change 3 55280dc HEAD@{17}: commit: Change 2 598a03a HEAD@{18}: commit: Change 1 d80e5f1 HEAD@{19}: commit (initial): Init Project
ïŒã®ã¯ãäœãèµ·ãã£ãã®ãèŠãŠã¿ãŸããã
ãã®åŸãã³ãããã«åããå¥ã®ãã©ã³ããåæ§ç¯ããããã«ã¯ã圌ãã®å
±éã®èµ·æºãèŠã€ããå¿
èŠã調æŽå¯èœãªæãããŠãåãé åºã§ãã«ãããã眮ãã¡ã€ã³ïŒããŒã¹ïŒæ¯åºãéåžžã«æ確ãªç»åïŒæ©èœã¯ãã¹ã¿ãŒã«ãªãã«ãäžã§ãïŒïŒ
éèŠãªæ³šæïŒãperestroikaãã®åŸããããã¯æ°ããã³ãããã«ãªããŸãããããŠãå€ããã®ã¯æ¶ãããã©ãã«ã移åããŸããã§ããã: merge-commit. collider/terminate collider/start .
collider/terminate collider/start , master merge-commit . , , master ( git checkout master && git reset --hard collider/terminate ). , . Git â , .
ç§ãã¡ã¯çè«ãç解ããå®éã«è©ŠããŠã¿ãŸãããã³ã©ã€ããŒ/çµäºã«åãæ¿ãããã¹ã¿ãŒããã€ã³ãããã³ãããã«åæ§ç¯ããŸãïŒãŸãã¯ãã³ã©ã€ããŒ/éå§ããã䟿å©ãªäººïŒãã³ãã³ãã¯æåéããçŸåšã®ãã©ã³ããååŸããæå®ãããã³ããããŸãã¯ãã©ã³ãã§åæ§ç¯ããŸããïŒ dev1(master)$ git checkout collider/terminate Switched to branch 'collider/terminate' dev1(collider/terminate)$ git rebase -i master
ãšãã£ã¿ãŒãéããããã次ã®ãã®ã衚瀺ãããŸãã pick 4ea02f5 Added Collider Terminate Function
ã€ãŸãããã¬ã¹ããã€ã«ã®éçšã§ãã³ãããã«é¢ããã³ã¡ã³ããå€æŽããããã³ãããèªäœãç·šéããããããŒãžããããå®å
šã«ã¹ããããããã§ããŸãã ã€ãŸã
ãã©ã³ãã®å±¥æŽãèªèããã«æžãæããããšãã§ããŸãããã®æ®µéã§ã¯ãããã¯å¿
èŠãããŸããããšãã£ã¿ãŒãéããŠç¶è¡ããŸããåååæ§ã競åãé¿ããããšã¯ã§ããŸããã error: could not apply 4ea02f5... Added Collider Terminate Function When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To check out the original branch and stop rebasing run "git rebase --abort". Could not apply 4ea02f5... Added Collider Terminate Function dev1((no branch))$ git status
git mergetoolã䜿çšããŠç«¶åã解決ãã "rebuild" -git rebase --continueãç¶è¡ããŸããGitã¯ã€ã³ã¿ã©ã¯ãã£ãã«å€æŽããã³ã³ã¡ã³ãããæ©èœãæäŸããŸããçµæïŒ
ããã§ããã¹ã¿ãŒãæŽæ°ããŠäžèŠãªãã®ããã¹ãŠåé€ããããšã¯ãã¯ãé£ãããããŸããïŒ dev1(collider/terminate)$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 5 commits. dev1(master)$ git merge collider/terminate Updating d229fa9..6661c2e Fast-forward collider.init.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) dev1(master)$ git branch -d collider/start Deleted branch collider/start (was d229fa9). dev1(master)$ git branch -d collider/terminate Deleted branch collider/terminate (was 6661c2e).
ãã®æ®µéã§ãç·šéãåé€ãç·šéãããŒãžããåºåã§ã¯ãå€åã®çŸããç·åœ¢å±¥æŽãååŸããŸããã
äŒæ©
ããªãå€ãã®æ
å ±ããã§ã«åä¿¡ãããŠããã®ã§ãåæ¢ããŠãã¹ãŠã«ã€ããŠèããå¿
èŠããããŸããäŸã䜿çšããŠã次ã®gitæ©èœã«ç²ŸéããŸããã- ç°¡åãªãªããžããªäœæ
- ãªããžããªã®ã¯ããŒãã³ã°
- Gitã¯å€æŽã§ã®ã¿æ©èœããŸã
- 1ã€ã®ãããžã§ã¯ã/ã©ã€ãã©ãª/ãã©ã°ã€ã³-1ã€ã®ãªããžããª
- ãã©ã³ããã³ã¡ã³ããã³ãããã¯ç°¡åã«å€æŽã§ããŸã
- ä»»æã®ç¶æ
ãéžæããŠãããããæ°ããã¹ããŒãªãŒãéå§ã§ããŸãã
- å€æŽãã1ã€ã®çŽç·äžã«ãããå Žåãæ©éãïŒå·»ãæ»ãã競åãªãã®ããŒãžïŒãå®è¡ã§ããŸãã
ãããªãäŸã¯ããè€éã«ãªããŸãããã¡ã€ã«ã«ã©ã³ãã ãªè¡ãè¿œå ããç°¡åãªã¹ã¯ãªããã䜿çšããŸãããã®æ®µéã§ã¯ãã©ã®ãããªã³ã³ãã³ãã§ãæ§ããŸãããã1ã€ã ãã§ãªããããŸããŸãªã³ããããçšæããããšããå§ãããŸããæ確ã«ããããã«ãã¹ã¯ãªããã¯ãã¡ã€ã«ã«ã©ã³ãã ãªè¡ãè¿œå ããgitã³ããããäœæããŸããããã¯æ°åç¹°ãè¿ãããŸãïŒ dev1(master)$ for i in `seq 1 2`; do STR=`pwgen -C 20 -B 1`; echo $STR >> trash.txt; git commit -m "Added $STR" trash.txt; done [master e64499d] Added rooreoyoivoobiangeix 1 file changed, 1 insertion(+) [master a3ae806] Added eisahtaexookaifadoow 1 file changed, 1 insertion(+)
å€æŽã®éä¿¡ãšåä¿¡
ãªã¢ãŒããªããžããªãæäœããæ¹æ³ãåŠã¶æãæ¥ãŸãããäžè¬çã«èšãã°ãä»äºã«ã¯æ¬¡ã®ããšãã§ããå¿
èŠããããŸãã- ãªã¢ãŒããªããžããªã«é¢ããæ
å ±ã®è¿œå /åé€/å€æŽ
- ããŒã¿ãåãåãïŒãã©ã³ããã¿ã°ãã³ãããïŒ
- ããŒã¿ãéä¿¡ããïŒãã©ã³ããã¿ã°ãã³ãããïŒ
䜿çšãããäž»ãªã³ãã³ãã®ãªã¹ãã¯æ¬¡ã®ãšããã§ããgit remote
-ãªã¢ãŒããªããžããªã®ç®¡çgit fetch
-ååŸgit pull
- git fetch
+ ãšåãgit merge
git push
-éä¿¡
git remote
äžèšã®ããã«ãoriginã¯ããã©ã«ãã®ãªããžããªåã§ããååãå¿
èŠã§ã ããã€ãã®ãªããžããªãååšããå¯èœæ§ããããäœããã®æ¹æ³ã§åºå¥ããå¿
èŠããããŸããããšãã°ããã©ãã·ã¥ãã©ã€ãã«ãªããžããªã®ã³ããŒãããããã©ãã·ã¥ãªããžããªãè¿œå ããŸããããããã£ãŠãoriginãšflashã® 2ã€ã®ãªããžããªãåæã«äœ¿çšã§ããŸãããªããžããªåã¯ãã©ã³ãåã®ãã¬ãã£ãã¯ã¹ãšããŠäœ¿çšãããããããã©ã³ããå¥ã®ãã©ã³ããšåºå¥ããããšãã§ããŸãïŒäŸïŒmasterããã³origin / masterïŒã¡ãã£ãšããããªãã¯master origin origin/master . , '/'.
ã€ãŸã " origin\/master ", master . Git , , . , .
ãã«ãgit remote
ããã¥ã¡ã³ãã¯éåžžã«ãã説æãããŠããŸããäºæ³ã©ãããã³ãã³ãããããŸãïŒaddãrmãrenameãshowãshow
åºæ¬çãªãªããžããªèšå®ã衚瀺ãããŸãïŒ dev1(master)$ git remote show origin * remote origin Fetch URL: /home/sirex/proj/git-habr/origin Push URL: /home/sirex/proj/git-habr/origin HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (fast-forwardable)
æ¢åã®ãªããžããªãè¿œå ããã«ã¯ã次ã䜿çšããŸãadd
ã git remote add backup_repo ssh://user@myserver:backups/myrepo.git
git fetch
ããŒã ã¯ããã代åŒããŸããå€æŽãååŸããŸããããŒã«ã«ã§å€æŽããªãããšã¯æ³šç®ã«å€ããŸããGitã¯äœæ¥ã³ããŒã«è§Šããããã©ã³ãã«ã觊ããŸãããæ°ããã³ããããããŠã³ããŒãããããªã¢ãŒããã©ã³ããšã¿ã°ã®ã¿ãæŽæ°ãããŸããããã¯ããªããžããªãæŽæ°ããåã«ããã¹ãŠã®å€æŽã確èªã§ãããã䟿å©ã§ãã以äžã¯ããã·ã¥ã³ãã³ãã®èª¬æã§ããããã§ãããã©ã®ããã«æ©èœããããæ確ã«ç€ºãããã«ãå€æŽãoriginã«æž¡ãå¿
èŠããããŸãã dev1(master)$ git push origin master Counting objects: 29, done. Delta compression using up to 4 threads. Compressing objects: 100% (21/21), done. Writing objects: 100% (27/27), 2.44 KiB, done. Total 27 (delta 6), reused 0 (delta 0) Unpacking objects: 100% (27/27), done. To /home/sirex/proj/git-habr/origin d80e5f1..a3ae806 master -> master
次ã«ãdev2ã代衚ããŠãäœãäœã§ãããã確èªãããã¹ãŠã®å€æŽãååŸããŸãã dev2(master)$ git log commit d80e5f1746856a7228cc27072fa71f1c087d649a Author: jsirex Date: Thu Apr 4 04:21:07 2013 +0300 Init Project
ããã¯æ¬¡ã®ããã«ãªããŸãã
ç§ãã¡ãããŠããããšã«æ³šæããŠãã ãããã¹ã¿ãŒãã§ããããšïŒgit checkout origin/master
-ãªã¢ãŒããã¹ã¿ãŒã«åãæ¿ããŠãã¿ãããããŸãããã®ãã©ã³ããç·šéããããšã¯ã§ããŸããããç¬èªã®ããŒã«ã«ãã©ã³ããäœæããŠæäœã§ããŸããgit merge origin/master
-æ°ããå€æŽãšç¬èªã®å€æŽãçµã¿åãããŸãããªããªã
ããŒã«ã«ã«å€æŽããªãã£ãå ŽåãããŒãžã¯æ©éãã«å€ãããŸãã dev2(master)$ git merge origin/master Updating d80e5f1..a3ae806 Fast-forward README.md | 2 ++ collider.init.sh | 31 +++++++++++++++++++++++++++++++ trash.txt | 2 ++ 3 files changed, 35 insertions(+) create mode 100755 collider.init.sh create mode 100644 trash.txt
æ°ãããã©ã³ãããªãªãžã³ã«è¡šç€ºãããå ŽåãfetchèªäœãããããããŠã³ããŒãããŸãããŸãããã¹ãŠã§ã¯ãªãç¹å®ã®ãã©ã³ãã®ã¿ãæŽæ°ããããã«ãã§ãããèŠæ±ããããšãã§ããŸããéèŠãªãã€ã³ãïŒèª°ãããªãªãžã³ãããã©ã³ããåé€ãããšããããªãã¯ãŸã ããŒã«ã«ã§ããã«ã€ããŠã®ããŒã«ã«ã¬ã³ãŒããæã£ãŠããŸããããšãã°ãorigin / deleted / branchã¯åŒãç¶ã衚瀺ãããŸãããããååšããŸããããããã®ãšã³ããªãåé€ããã«ã¯ãã䜿çšããŸãgit fetch origin --prune
ãgit pull
git pull
git fetch + git mergeãšåãã§ãããã¡ãããå€æŽã¯å¯Ÿå¿ãããã©ã³ããšããŒãžãããŸãïŒmaster with origin / masterãfeature with origin / featureããã©ã³ãã¯ã誰ããèããããã«ååã§çµåãããŠããŸããããäžæµã®è¿œè·¡ãã©ã³ãã®ããã§ããäœæ¥ã®ããã«ãã©ã³ãããã§ãã¯ã¢ãŠããããšãgitã¯æ¬¡ã®ãããªããšãããŸãã- æ¢ã«ãã®ãããªãã©ã³ããããŒã«ã«ã«ååšãããã©ããã調ã¹ãååšããå Žåã¯ãããååŸããŸã
- ãã©ã³ãããªãå Žåã¯ããªã¢ãŒãã«ãããã©ããã調ã¹ãŸã/ <branch_name>
- ååšããå Žåãorigin / <branch_name>ãšåãå Žæã«ããŒã«ã«ã«<branch_name>ãäœæãããããã®ãã©ã³ããããªã³ã¯ãããŸãïŒãã©ã³ã<branch_name>ã¯çŸåšããªã¢ãŒãã®origin / <branch_name>ã远跡ããŠããŸãïŒ
ããã¯.git / configãã¡ã€ã«ã§ç¢ºèªã§ããŸãïŒ [branch "master"] remote = origin merge = refs/heads/master
95ïŒ
ã®å Žåããã®åäœãå€æŽããå¿
èŠã¯ãããŸãããããŒã«ã«ã§å€æŽããã£ãå Žåãgit pull
ãããã¯ãªã¢ãŒããã©ã³ããšèªåçã«ããŒãžãããæ©éãã§ã¯ãªãããŒãžã³ããããè¡ãããŸããäœããéçºããŠããéãã³ãŒãã¯å€ããªã£ãŠãããããæåã«ã¢ããã°ã¬ãŒãããæ°ããã³ãŒãã®äžã«ãã¹ãŠã®å€æŽãé©çšããŠããçµæãåºãã®ãããã§ãããããŸãã¯ãä»ã®ãšããããŒã«ã«ã§ç¶è¡ããŸãããããŠãç©èªãæ··ãããªãããã«ãããã¯ãããè¡ãã®ã«åœ¹ç«ã¡ãŸãrebase
ãgitãããã©ã«ãrebase
ã§ã¯ãªãã䜿çšããmerge
ããã«ãããªãã¯ãããå°ããããšãã§ããŸãïŒ git config branch.<branch_name>.rebase true
git push
git push origin
-å€æŽã転éããŸãããã®å Žåããã¹ãŠã®è¿œè·¡ãã©ã³ããéä¿¡ãããŸããç¹å®ã®ãã©ã³ããäŒããããã«ãæ瀺çã«ååãæå®ããå¿
èŠããããŸãgit push origin branch_name
ããã®æ®µéã§ãçåãçããå ŽåããããŸãã- ç¹å®ã®å€æŽãæž¡ãã«ã¯ã©ãããã°ããã§ããïŒ
- ãã©ã³ããåé€ããã«ã¯ã©ãããã°ããã§ããïŒ
- ç¹å®ã®ã³ãããããæ°ãããã©ã³ããäœæããã«ã¯ã©ãããã°ããã§ããïŒ
- ãªã©
ã³ãã³ãã®æ¡åŒµãŠãŒã¹ã±ãŒã¹ã¯ããã¹ãŠã®è³ªåã«çããããšãã§ããŸããgit push origin <___>:<___origin>
äŸïŒ git push origin d80e5f1:old_master
éèŠïŒãã©ã³ããæŽæ°ãããšããæåã«ãã¹ãŠã®ææ°ã®å€æŽãååŸããŠããããã¹ãŠãå
ã«æ»ãããšããããšãæ³å®ãããŸããGitã¯ã¹ããŒãªãŒãç·åœ¢ã®ãŸãŸã§ãããšæ³å®ããçŸåšã®å€æŽãç¶ç¶ããŸãïŒæ©éãïŒããã以å€ã®å Žåã¯ã以äžãåãåããŸãïŒrejected! non fast-forward push!
ã
æã
ãããªããäœãããŠããããæ£ç¢ºã«ç¥ã£ãŠãããšããããã¯å¿
èŠã§ãããããåé¿ã§ããŸãïŒ git push origin master --force
ç§ãã¡ã¯ãããžã§ã¯ãã«å«ãŸããŠããŸã
ãã®æç¹ã§ãããã·ã¥ããã«ãã©ã®ããã«æ©èœãããã¯å€ããå°ãªããæããã§ããããã«ææ§ãªã®ã¯ãããŒãžãšãªããŒã¹ã®éãã§ããããããªãå¿
èŠã§ãã©ã®ããã«é©çšããã®ãã¯å®å
šã«äžæã§ãã誰ãã«å°ãããããïŒ-ãªãããŒãžã§ã³ç®¡çã·ã¹ãã ãå¿
èŠãªã®ã§ããïŒã»ãšãã©ã®å Žåãããªãã¯èãããšãã§ããŸãïŒ-ãã®ã·ã¹ãã ã¯ããããžã§ã¯ãã®ãã¹ãŠã®å€æŽãä¿åããã®ã«åœ¹ç«ã¡ãäœã倱ãããããã€ã§ããããŒã«ããã¯ãã§ããŸããããã§ããã©ã®ãããã®é »åºŠã§ããŒã«ããã¯ããªããã°ãªããªãã®ãããšãã質åãèªåããŠãã ããããããžã§ã¯ãã®æåŸã®ç¶æ
ãããå€ããä¿åããå¿
èŠããããŸããïŒæ£çŽãªçãã¯ãéåžžã«ãŸããã§ãããã®è³ªåãæèµ·ããŠããããžã§ã¯ãã«ãããããŒãžã§ã³ç®¡çã·ã¹ãã ã®ã¯ããã«éèŠãªåœ¹å²ã匷調ããŸããããŒãžã§ã³ç®¡çã·ã¹ãã ã«ãããè€æ°ã®éçºè
ãããââãžã§ã¯ãã§å
±åäœæ¥ã§ããŸãã
ãããžã§ã¯ãã§ä»ã®éçºè
ãšäžç·ã«äœæ¥ããã®ãããã«äŸ¿å©ã§ãããŒãžã§ã³ç®¡çã·ã¹ãã ãã©ãã ããããæ¯æŽããŠããããæãéèŠãªããšã§ããïŒ
VCS_NAMEïŒ
ã䜿çšããŠããŸããïŒäŸ¿å©ã§ããïŒéçºããã»ã¹ãå¶éããèŠä»¶ã«ç°¡åã«é©å¿ããŸããïŒéãïŒãããã£ãŠããã®ïŒ
VCS_NAMEïŒ
ã¯ãããžã§ã¯ãã«æé©ã§ãããããããäœãå€æŽããå¿
èŠã¯ãããŸãããå
žåçãªãããžã§ã¯ãã·ããªãª
ããã§ã¯ãã³ãŒãã®èŠ³ç¹ãããããžã§ã¯ãã«åãçµãå
žåçãªã·ããªãªã«ã€ããŠè©±ããŸãããããããŠããïŒ- ãªãªãŒã¹ãªãªãŒã¹
- ãã°ä¿®æ£
- ç·æ¥ã®ä¿®æ£ïŒä¿®æ£ããã°ã©ã ïŒ
- åæã«ããã€ãã®æ©èœã®éçºïŒæ©èœéçºïŒ
- ç¹å®ã®æ©èœã®åé¡ãŸãã¯æºåã«é¢ãããªãªãŒã¹
ãã®ããã»ã¹ãå®çŸããã«ã¯ãã©ãã«äœãä¿åããããæ確ã«æ±ºå®ããå¿
èŠããããŸãããªããªã
ãã¹ãŠã®ã¿ã¹ã¯ã«è»œéã®ãã©ã³ãïŒã€ãŸãããªãœãŒã¹ãå Žæãªã©ãè²»ãããªãïŒã®å Žåãåå¥ã®ãã©ã³ããäœæã§ããŸããããã¯è¯ãç¿æ
£ã§ãããã®ã¢ãããŒãã«ãããäžé£ã®å€æŽãç°¡åã«æäœããããããããããŸããŸãªãã©ã³ãã«å«ãããã倱æãããªãã·ã§ã³ãå®å
šã«æé€ãããããããšãã§ããŸãããã¹ã¿ãŒã¯ãéåžžãæåŸã«ãªãªãŒã¹ãããããŒãžã§ã³ãä¿æããå¯äžã®ãªãªãŒã¹ãããªãªãŒã¹ã«æŽæ°ãããŸãã次ã®ããã«ãããŒãžã§ã³ã瀺ãã¿ã°ãäœæããå¿
èŠã¯ãããŸããããã¹ã¿ãŒãæŽæ°ãããå ŽåããããŸããã¡ã€ã³ã®éçºçšã«ãã1ã€ã®ãã©ã³ããå¿
èŠã«ãªããŸããããã¯ãã¹ãŠãããŒãžãããmasterã®ç¶ç¶ãšãªããã©ã³ãã§ããããã¯ãã¹ããããæºåãã§ããããªãªãŒã¹äžã«ãã¹ãŠã®å€æŽãmasterã«ããŒãžãããŸãããã®ã¹ã¬ãããåŒã³åºããŸãããDEVãä¿®æ£ããã°ã©ã ããªãªãŒã¹ããå¿
èŠãããå Žåããã¹ã¿ãŒç¶æ
ãŸãã¯ç¹å®ã®ã¿ã°ã«æ»ããä¿®æ£ããã°ã©ã /ããŒãžã§ã³ãã©ã³ããäœæããŠãéèŠãªå€æŽã®ä¿®æ£äœæ¥ãéå§ã§ããŸããããã¯ãèšèšããã³é²è¡äžã®éçºã«ã¯åœ±é¿ããŸãããfeature / <feature_name>ãã©ã³ãã䜿çšããŠæ©èœãéçºãããšäŸ¿å©ã§ãããã®ã¹ã¬ãããææ°ã®å€æŽã§éå§ããdevããèªåã«å®æçã«å€æŽãããã«ãããããšããå§ãããŸããã¹ããŒãªãŒãã·ã³ãã«ãã€çŽç·çã«ä¿ã€ã«ã¯ãdevïŒgit rebase dev
ïŒã§ãã©ã³ããåæ§ç¯ããããšããå§ãããŸãããã€ããŒãªãã°ã®ä¿®æ£ã¯ã«çŽæ¥è¡ãããšãã§ããŸãDEVããã ããå°ããªãã°ãå€æŽããã£ãŠããããŒã«ã«ã«äžæçãªãã©ã³ããäœæããããšããå§ãããŸããããããã°ããŒãã«ãªããžããªã«éä¿¡ããå¿
èŠã¯ãããŸããããããã¯äžæçãªãã©ã³ãã«ãããŸããããã®ã¢ãããŒãã¯å€ãã®æ©äŒãæäŸããŸãïŒ- ããã€ãã®ã¿ã¹ã¯ã«åãçµãããšãã§ããŸãããããã°ã«ãã ãã£ãŠãdevã«åãæ¿ããŠãæ°ãããã©ã³ããäœæããå¥ã®ãã©ã³ããä¿®æ£ããŠãããæåã®ãã©ã³ãã«æ»ããŸããããªãã¬ãã·ã¥ãããã¹ãŠãæŸæ£ãã3çªç®ãå®è¡ãå§ããŸããã
- åé¡ã¯æ¬çªç°å¢ã§é倧ã«ãªããŸãã- ãã¹ã¿ãŒãŸãã¯ç¹å®ã®ããããã£ãã¯ã¹ã®ä¿®æ£ã§ãªããŒã¹ãã©ã³ããåæ§ç¯ããä¿®æ£ã1ã€ã ãã®æ°ããããŒãžã§ã³ããªãªãŒã¹ããŸããã
- åæ§ã«ãäœæ¥ãä»ã®ãã©ã³ãïŒæ©èœãã©ã³ããªã©ïŒã«è»¢éã§ããŸãã
- å€æŽãéä¿¡ããåã«ããã©ã³ããå°ããããããããäœåãªã³ããããåé€ããããã³ã¡ã³ããä¿®æ£ãããããããšãã§ããŸãã
ãã°ä¿®æ£
devãã©ã³ããäœæããŠãå
žåçãªãã°ä¿®æ£ã·ããªãªãèããŠã¿ãŸãããã dev1(master)$ git status
ãããŠã2çªç®ã®éçºè
ã¯ãèªåèªèº«ã«æ°ãããã©ã³ãããåãå
¥ãããŸãã dev2(master)$ git pull From /home/sirex/proj/git-habr/origin * [new branch] dev -> origin/dev Already up-to-date.
2人ã®éçºè
ãããããç¬èªã®ãã°ã«åãçµã¿ãããã€ãã®ã³ããããè¡ãããã«ããŸãïŒãã®ãããªãæ¹æ³ã§å€ãã®ã©ã³ãã ã³ããããçæãããšããäºå®ãšæ··åããªãã§ãã ããïŒã dev1(dev)$ for i in `seq 1 10`; do STR=`pwgen -C 20 -B 1`; echo $STR >> trash.txt; git commit -m "Added $STR" trash.txt; done [dev 0f019d0] Added ahvaisaigiegheweezee 1 file changed, 1 insertion(+) [dev c715f87] Added eizohshochohseesauge 1 file changed, 1 insertion(+) [dev 9b9672c] Added aitaquuerahshiqueeph 1 file changed, 1 insertion(+) [dev 43dad98] Added zaesooneighufooshiph 1 file changed, 1 insertion(+) [dev 9da2de3] Added aebaevohneejaefochoo 1 file changed, 1 insertion(+) [dev e93f93e] Added rohmohpheinugogaigoo 1 file changed, 1 insertion(+) [dev 54ba433] Added giehaokeequokeichaip 1 file changed, 1 insertion(+) [dev 05f72db] Added hacohphaiquoomohxahb 1 file changed, 1 insertion(+) [dev 8c03e0d] Added eejucihaewuosoonguek 1 file changed, 1 insertion(+) [dev cf21377] Added aecahjaokeiphieriequ 1 file changed, 1 insertion(+)
dev2(master)$ for i in `seq 1 6`; do STR=`pwgen -C 20 -B 1`; echo $STR >> trash.txt; git commit -m "Added $STR" trash.txt; done [master 1781a2f] Added mafitahshohfaijahney 1 file changed, 1 insertion(+) [master 7df3851] Added ucutepoquiquoophowah 1 file changed, 1 insertion(+) [master 75e7b2b] Added aomahcaashooneefoavo 1 file changed, 1 insertion(+) [master d4dea7e] Added iexaephiecaivezohwoo 1 file changed, 1 insertion(+) [master 1459fdb] Added quiegheemoighaethaex 1 file changed, 1 insertion(+) [master 1a949e9] Added evipheichaicheesahme 1 file changed, 1 insertion(+)
äœæ¥ãçµäºããããå€æŽããªããžããªã«è»¢éããŸããDev1ïŒ dev1(dev)$ git push origin dev Counting objects: 32, done. Delta compression using up to 4 threads. Compressing objects: 100% (30/30), done. Writing objects: 100% (30/30), 2.41 KiB, done. Total 30 (delta 19), reused 0 (delta 0) Unpacking objects: 100% (30/30), done. To /home/sirex/proj/git-habr/origin a3ae806..cf21377 dev -> dev
2çªç®ã®éçºè
ïŒ dev2(master)$ git push origin dev error: src refspec dev does not match any. error: failed to push some refs to '/home/sirex/proj/git-habr/origin'
ã©ããããŸããç§ãã¡ã¯ãã£ããpull
ãdevã«åãæ¿ããã®ãå¿ããŠããŸããããããŠåœŒãã¯ãã¹ã¿ãŒã§åãå§ããŸãããgitã䜿çšãããšãã¯ãã§ããã ãå
·äœçã«ãã³ãã³ãããå®è¡ããŠãã ãããå€æŽãdevã«æž¡ããããšæããŸããã代ããgit push origin dev
ã«åçŽã«äœ¿çšããå Žågit push
ãgitã¯å¿
èŠãªåŠçãè¡ããŸã- ãã¹ã¿ãŒããorigin / masterã«å€æŽãæž¡ããŸãããã®ç¶æ³ã¯ä¿®æ£ã§ããŸãããããè€éã§ãããã¹ãŠãããŒã«ã«ã§ä¿®æ£ããæ¹ãã¯ããã«ç°¡åã§ããäžèšã®ããã«ãããã¯å€§äžå€«ã§ãããã¹ãŠãä¿®æ£å¯èœã§ãããã€ãã®ããã«ãã®ã¯ã圌女ãè¡ã£ãŠãããèŠãŠã¿ãŸãããgitk --all
ïŒ
ç§ãã¡ã¯åé²ãæã£ãŠããã»é転ãããã¹ã¿ãŒãããããdevã«ãè¡ããå¿
èŠããããŸãããç¶æ³ãä¿®æ£ããããã®ããã€ãã®ãªãã·ã§ã³ããããŸããããã§ã¯ãããšãã°æ¬¡ã®ããã«ã§ããŸãã- ä»ã«å€æŽããªãã£ããããdevã«åãæ¿ããŸã
- masterããdevãžã®ãã¹ãŠã®å€æŽãçµåããŸãïŒçŽæ¥ãã¹ãæ©éããåé¡ãªãïŒã
- æ£ããdevãå®è¡ããééã£ããã¹ã¿ãŒã以åã®æ£ããäœçœ®ã«èšå®ããŸãã以åã®äœçœ®ïŒorigin / masterïŒ
äžèŠãå€ãã®ã¢ã¯ã·ã§ã³ãããããã¹ãŠãäœããã®åœ¢ã§è€éã«ãªã£ãŠããããã§ããããããèŠãŠã¿ããšãäœãããå¿
èŠãããããšãã説æã¯ãäœæ¥ãã®ãã®ãããã¯ããã«å€ããªã£ãŠããŸãããããŠãæãéèŠãªããšã¯ããã§ã«äžèšã§è¡ã£ãããšã§ããç·Žç¿ããŸãããïŒ dev2(master)$ git checkout dev
çµæãèŠãŠã¿ãŸãããïŒ
ä»ããã¹ãŠãããããã¹ãã§ãïŒç§ãã¡ã®å€æŽã¯devã«ãããoriginã«æž¡ãæºåãã§ããŠããŸããåæ ŒïŒ dev2(dev)$ git push origin dev To /home/sirex/proj/git-habr/origin ! [rejected] dev -> dev (non-fast-forward) error: failed to push some refs to '/home/sirex/proj/git-habr/origin' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (eg 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
ä»ã®èª°ãïŒdev1ïŒããªããžããªãæŽæ°ããå€æŽãæž¡ããç§ãã¡ã¯åã«ãé
ãããããã転éã¯æ©èœããŸããã§ãããgit pull
ãŸãã¯ãäœæããŠç¶æ
ãæŽæ°ããå¿
èŠãããgit fetch
ãŸãããªããªã
git pullã¯ããã«ãã©ã³ããããŒãžããŸããgitfetchã䜿çšããããšã奜ã¿ãŸããåŸã§èŠãŠåã£ãŠæ±ºå®ããæ©äŒãäžããŠãããŸãã dev2(dev)$ git fetch origin remote: Counting objects: 32, done. remote: Compressing objects: 100% (30/30), done. remote: Total 30 (delta 19), reused 0 (delta 0) Unpacking objects: 100% (30/30), done. From /home/sirex/proj/git-habr/origin a3ae806..cf21377 dev -> origin/dev
å€æŽãäŒããããã®ããã€ãã®ãªãã·ã§ã³ããããŸãã- ããã«ãã£ããã®ãæ¶å»ããŠãå€æŽã匷å¶çã«è»¢éããŸãã
git push origin dev --force
- ã䜿çšããŠãã©ã³ããç¶è¡ã
git merge origin/dev
ã次ã«git push origin dev
ïŒæ°ããå€æŽãç¬èªã®å€æŽãšããŒãžããŠè»¢éããŸãïŒ - ãã©ã³ããæ°ãããã©ã³ãã®äžçªäžã«åæ§ç¯ããŸããããã«ãããéçºã·ãŒã±ã³ã¹ãä¿æãããäžèŠãªãã©ã³ããäžèŠã«
git rebase origin/dev
ãªãgit push origin dev
ãŸãã
æãé
åçãªã®ã¯3çªç®ã®ãªãã·ã§ã³ã§ããããã«ãã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãã§è©ŠããŠã¿ãŸãã dev2(dev)$ git rebase -i origin/dev
ãšãã£ã¿ãŒãéããå±¥æŽãä¿®æ£ããæ©äŒãæäŸããŸããããšãã°ãã³ãããã®é åºãå€æŽããããããã€ããçµåãããããŸããããã¯äžã«æžãããŠããŸãããã®ãŸãŸã«ããŠãããŸãã pick 1781a2f Added mafitahshohfaijahney pick 7df3851 Added ucutepoquiquoophowah pick 75e7b2b Added aomahcaashooneefoavo pick d4dea7e Added iexaephiecaivezohwoo pick 1459fdb Added quiegheemoighaethaex pick 1a949e9 Added evipheichaicheesahme
ãã¬ã¹ããã€ã«ã®éçšã§ã察ç«ãçããŸããgit mergetool
ïŒãŸãã¯å¿
èŠã«å¿ããŠïŒè§£æ±ºãããªã¹ãã©ãç¶ããŸãgit rebase --continue
ãªããªã
ç§ã¯åžžã«åäžã®ãã¡ã€ã«ã«è¡ãè¿œå ããŠããŸããã競åã¯é¿ããããŸããããå®éã®ãããžã§ã¯ãã§ã¯ããããžã§ã¯ãã®ããŸããŸãªéšåã®äœæ¥ãåæ£ããããšã競åã¯ãŸã£ããçºçããŸããããŸãã¯ãéåžžã«ãŸãã§ãããããããããã€ãã®äŸ¿å©ãªã«ãŒã«ãå°ãåºãããšãã§ããŸãã- åã³ãããã«ã¯ãè«ççãªå€æŽã1ã€ã ãå«ããå¿
èŠããããŸããæ©èœãäœæããŠã³ãŒãã®ãã°ã«æ°ä»ããå Žåã¯ãå¥ã®ã³ãããã§ä¿®æ£ããããšããå§ãããŸããåŸã§ãçµåãããšã競åãéåžžã«ç°¡åã«è§£æ±ºã§ããŸãã競åãšãããäœãæããŠãããã瀺ãå¥åã®ã³ãããã衚瀺ãããŸããã³ãããã¯ãããžã§ã¯ãã®æ§æèŠçŽ ãšèããŠãã ãããåããªãã¯èªäœã¯è«ççã§å®å
šã§ãã
- äœåãéãªããªãããã«é
åžããŠã¿ãŠãã ãããåãå Žæã§åããã¡ã€ã«ãç·šéãããŠããŸãããã¯ã©ã¹ã®ããžãã¯ã2ã€ã®ãã©ã³ãã§åæã«å€æŽãããå Žåããã®ã¯ã©ã¹ã䜿çšããŠããã€ãã®ã·ã¹ãã ãçµåãããšåäœããªããªããŸããããããªããšããã¹ãŠãæ©èœããªããªããŸãã
ãã¹ãŠã®ç«¶åã解決ããããšãã¹ããŒãªãŒã¯ç·åœ¢ãã€è«ççã«ãªããŸããæ確ã«ããããã«ãã³ã¡ã³ããå€æŽããŸããïŒã€ã³ã¿ã©ã¯ãã£ããªãªããŒã¹ããã®æ©äŒãäžããŸãïŒïŒ
ãã©ã³ãã¯origin / devãç¶ç¶ããå€æŽãéä¿¡ã§ããŸãïŒé¢é£ãæ°ããã³ãããã«é©å¿ïŒ dev2(dev)$ git push origin dev Counting objects: 20, done. Delta compression using up to 4 threads. Compressing objects: 100% (18/18), done. Writing objects: 100% (18/18), 1.67 KiB, done. Total 18 (delta 11), reused 0 (delta 0) Unpacking objects: 100% (18/18), done. To /home/sirex/proj/git-habr/origin cf21377..8212c4b dev -> dev
ããã«ãç©èªã¯ç¹°ãè¿ãããŸããäžèšã®ããã«ã䟿å®äžããŸãã¯ããã€ãã®ãã°ã«é¢ããäœæ¥ã®å Žåãäœæ¥ãéå§ããåã«devãŸãã¯origin / devããåå¥ã®ãã©ã³ããäœæãããšäŸ¿å©ã§ããçãèŠçŽïŒéåžžã®ãã°ä¿®æ£ã¯ã次ã®ç°¡åãªã¢ã«ãŽãªãºã ã䜿çšããŠå®è¡ã§ããŸãã- devãã©ã³ããŸãã¯ã»ãã¬ãŒãã®ä¿®æ£
- ãªãªãžã³ããã®å€æŽã®ååŸïŒ
git fetch origin
ïŒ - å€æŽãææ°ããŒãžã§ã³ã«ãªãã«ãããŸãïŒ
git rebase -i origin/dev
ïŒ - å€æŽããªãªãžã³ã«æž¡ãïŒ
git push origin dev
ïŒ
æ©èœãã©ã³ã
倧ããªäœæ¥ãè¡ãå¿
èŠãããå ŽåããããŸãããããã¯çµäºãããŸã§ã¡ã€ã³ããŒãžã§ã³ã«åé¡ãããã¹ãã§ã¯ãããŸãããããã€ãã®ãã©ã³ãã¯ãã®ãããªãã©ã³ãã§åäœã§ããŸããéåžžã«æ·±å»ã§èšå€§ãªãã°ã¯ãgitãæ©èœãšããŠåŠçããããã»ã¹ã®èŠ³ç¹ããèããããšãã§ããŸã-æ°äººãäœæ¥ããå¥ã®ãã©ã³ãã§ããããã»ã¹èªäœã¯ãéåžžã®ãã°ä¿®æ£ãšãŸã£ããåãã§ããå¯äžã®äœæ¥ã¯devã§ã¯ãªããæ©èœ/ååãã©ã³ãã§è¡ãããŸããäžè¬ã«ããã®ãããªãã©ã³ãã¯çåœïŒ1ã2é±éïŒãšé·åœïŒ1ãæ以äžïŒã«ãªããŸãããã¡ããããã©ã³ãã®å¯¿åœãé·ããªãã°ãªãã»ã©ãé »ç¹ã«æŽæ°ããå¿
èŠããããã¡ã€ã³ãã©ã³ãããå€æŽãããã«ãããŸãããã©ã³ãã倧ããã»ã©ãããã«äŒŽããªãŒããŒãããã倧ãããªããŸããçåœã®æ©èœãã©ã³ãããå§ããŸããã
éåžžããã©ã³ãã¯æåŸã®ã³ãŒãããäœæãããŸãããã®å Žåãdevãã©ã³ãããäœæãããŸãã dev1(dev)$ git fetch origin remote: Counting objects: 20, done. remote: Compressing objects: 100% (18/18), done. remote: Total 18 (delta 11), reused 0 (delta 0) Unpacking objects: 100% (18/18), done. From /home/sirex/proj/git-habr/origin cf21377..8212c4b dev -> origin/dev dev1(dev)$ git branch --no-track feature/feature1 origin/dev
ä»feature1ã®äœæ¥ã¯feature / feature1ãã©ã³ãã§è¡ãããšãã§ããŸãããã°ãããããšããã©ã³ãã«å€ãã®ã³ãããããããfeature1ã®äœæ¥ãå®äºããŸããåæã«ãdevã«ãå€ãã®å€æŽãå ããããŸãããããŠãç§ãã¡ã®ã¿ã¹ã¯ã¯ãå€æŽãdevã«éä¿¡ããããšã§ããç¶æ³ã¯æ¬¡
ã®ããã«ãªããŸããç¶æ³ã¯åã®ç¶æ³ã«äŒŒãŠããŸãã2ã€ã®ãã©ã³ãã1ã€ãä»ã®ãã©ã³ããšããŒãžãããªããžããªã«è»¢éããå¿
èŠããããŸããå¯äžã®éãã¯ãããŒã«ã«ã®ãã©ã³ãã§ã¯ãªãã2ã€ã®ãããªãã¯ïŒãªã¢ãŒãïŒãã©ã³ãã§ããããã«ã¯å°ãã³ãã¥ãã±ãŒã·ã§ã³ãå¿
èŠã§ããäœæ¥ãçµäºããããéçºè
ã®1人ã¯ãdevã®å€æŽããããŒãžãããããšãã°ãã©ã³ããåé€ããããšãä»ã®éçºè
ã«èŠåããå¿
èŠããããŸãããããã£ãŠããã®ã¹ã¬ããã«äœãã転éããŠãæå³ããããŸããããããŠãã¢ã«ãŽãªãºã ã¯ä»¥åãšã»ãšãã©åãã§ãïŒ git fetch origin
ç»åãfeature1ã¯devã®äžéšã«ãªãã次ã«å¿
èŠãªãã®ïŒ
äžèŠãªãã®ãããã·ã¥ããŠã¯ãªãŒã³ã¢ããããŸãïŒ dev1(dev)$ git push origin dev Counting objects: 11, done. Delta compression using up to 4 threads. Compressing objects: 100% (9/9), done. Writing objects: 100% (9/9), 878 bytes, done. Total 9 (delta 6), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. To /home/sirex/proj/git-habr/origin 3272f59..e514869 dev -> dev dev1(dev)$ git push origin :feature/feature1
é·æã«ãããæ©èœãã©ã³ã
ãµããŒããšæŽæ°ã«ãããé·å¯¿åœãã©ã³ãã®è€éããäžèšã®ããã«ãã¹ãŠãè¡ããšãçœå®³ãçºçããå¯èœæ§ããããŸããæéããªããªããã¡ã€ã³ãã©ã³ããå€æŽããããããžã§ã¯ããå€æŽãããæ©èœãéåžžã«å€ãããŒãžã§ã³ã«åºã¥ããŠããŸããæ©èœããªãªãŒã¹ãããšããæ¥ããšããããžã§ã¯ãããããã¯ã¢ãŠããããŠããŸããçµåã¯éåžžã«å°é£ã«ãªãããäžå¯èœã«ãªãå¯èœæ§ãããããŸãããã®ããããã©ã³ããæŽæ°ããå¿
èŠããããŸãã devãåé²ããããæã
devãããã©ã³ããåæ§ç¯ããã ãã§ãããã¹ãŠã¯åé¡ãããŸããããpublicãã©ã³ããååŸããŠåæ§ç¯ããããšã¯ã§ããŸããããªããŒã¹åŸã®ãã©ã³ãã¯ãã§ã«æ°ããã³ãããã»ããã§ããããŸã£ããç°ãªã話ã§ãã圌女ã¯ãã§ã«è¡ã£ãããšãç¶ç¶ããŸããã Gitã¯ãã®ãããªå€æŽãåãå
¥ããŸããã2ã€ã®ç°ãªããã¹ãæ©éãã¯ãããŸãããã¹ããŒãªãŒãæžãçŽãã«ã¯ãéçºè
ãåæããå¿
èŠããããŸãã誰ããå±¥æŽãæžãæããŠæ°ããããŒãžã§ã³ã匷å¶ããŸãããçŸæç¹ã§ã¯ãæ®ãã¯çŸåšã®ãã©ã³ãã«å€æŽã転éããªãã§ãã ãããããã¯äžæžãããããã¹ãŠããªããªããŸããæåã®éçºè
ãçµäºãããšãä»ã®å
šå¡ãã³ãããã転éããŸããããã¯ããã§ã«æ°ãããã©ã³ãã§è¡ãããŠããåœå¢èª¿æ»äžã«è¡ãæéã§ãã誰ãããªãããããªãã¯ãã©ã³ãããªããŒã¹ã§ããªããšèšã£ãã®ã§ããïŒç·Žç¿ããŸãããïŒ dev1(dev)$ git checkout -b feature/long Switched to a new branch 'feature/long' dev1(feature/long)$ git push origin dev Everything up-to-date dev1(feature/long)$ __ dev1(feature/long)$ git push origin feature/long Counting objects: 11, done. Delta compression using up to 4 threads. Compressing objects: 100% (9/9), done. Writing objects: 100% (9/9), 807 bytes, done. Total 9 (delta 6), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. To /home/sirex/proj/git-habr/origin * [new branch] feature/long -> feature/long
2çªç®ã®éçºè
ã¯ããã¹ãŠã«æšæºçã«æ¥ç¶ããŸãïŒ dev2(dev)$ git pull remote: Counting objects: 11, done. remote: Compressing objects: 100% (9/9), done. remote: Total 9 (delta 6), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. From /home/sirex/proj/git-habr/origin * [new branch] feature/long -> origin/feature/long Already up-to-date. dev2(dev)$ git checkout feature/long Branch feature/long set up to track remote branch feature/long from origin. Switched to a new branch 'feature/long' dev2(feature/long)$ dev2(feature/long)$ git pull --rebase feature/long
ã¡ã€ã³ã®devãã©ã³ãã«ããã«ããã€ãã®ã³ããããè¿œå ãããšãã¹ããŒãªãŒã¯æ¬¡ã®ããã«ãªããŸããfeature / long
ãæŽæ°ããæãæ¥ãŸããããéçºã¯åå¥ã«ç¶è¡ããå¿
èŠããããŸããdev1ãåæ§ç¯ããŸãããã®åŸã圌ã¯ããã«ã€ããŠdev2ã«èŠåããéå§ããŸãã dev1(feature/long)$ git fetch origin dev1(feature/long)$ git rebase -i origin/dev ... , , ..
çŸæç¹ã§ã¯ãdev2ã¯åŒãç¶ãåäœããŸãããããã·ã¥ã§ããªãããšãç¥ã£ãŠããŸããç®çã®ãã©ã³ãã¯ãŸã ãããŸããïŒçŸåšã®ãã©ã³ãã¯åé€ãããŸãïŒãæåã®ãªããŒã¹ã¯ãªããŒã¹ããã¹ããŒãªãŒã¯æ¬¡ã®ããã«ãªããŸãã
ãã©ã³ãã¯ãªãã«ããããå
ã®å Žæ/æ©èœ/é·ãå Žæã¯ãã®ãŸãŸã§ãããç§ãã¡ã¯ç®æšãéæããŸããã次ã¯å
šå¡ãšå
±æããå¿
èŠããããŸãã dev1(feature/long)$ git push origin feature/long To /home/sirex/proj/git-habr/origin ! [rejected] feature/long -> feature/long (non-fast-forward) error: failed to push some refs to '/home/sirex/proj/git-habr/origin' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (eg 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Gitã¯ãäœããééã£ãŠããããšãæ¹ããŠæãåºãããŸãããããä»ãç§ãã¡ã¯äœãããŠããããæ£ç¢ºã«ç¥ã£ãŠããããããå¿
èŠã§ããããšãç¥ã£ãŠããŸãã dev1(feature/long)$ git push origin feature/long --force Counting objects: 20, done. Delta compression using up to 4 threads. Compressing objects: 100% (18/18), done. Writing objects: 100% (18/18), 1.58 KiB, done. Total 18 (delta 12), reused 0 (delta 0) Unpacking objects: 100% (18/18), done. To /home/sirex/proj/git-habr/origin + ce9e58d...84c3001 feature/long -> feature/long (forced update)
ããã§ãäœæ¥ã®å®äºã«ã€ããŠä»ã®äººã«èŠåããããšã«ãããããã«äœæ¥ãé²ããããšãã§ããŸãããããã®å€æŽãä»ã®äººãç¹ã«dev2ã«ã©ã®ããã«åœ±é¿ããããèŠãŠã¿ãŸãããã dev2(feature/long)$ git fetch origin remote: Counting objects: 20, done. remote: Compressing objects: 100% (18/18), done. remote: Total 18 (delta 12), reused 0 (delta 0) Unpacking objects: 100% (18/18), done. From /home/sirex/proj/git-habr/origin + ce9e58d...84c3001 feature/long -> origin/feature/long (forced update)
æŽå²ã¯åãããŠãããã³ãããã¯1ã€ãé€ããŠåæ§ç¯ãããŠããŸããã³ãããããŸã£ãããªãã£ãå Žåãã€ãŸãdev2éçºè
ã¯ãããèªã¿åããæåã®ããã¯æ©èœããŸãfeature/long
ãããã€ã³ã¿ãŒãåãããŠorigin/feature/long
äœæ¥ãç¶ããã ãã§ååã§ãããã ããè¿œå ããå¿
èŠãããã³ãããã1ã€ãããŸããããã§ãrebaseãããŒãšãšãã«åã³åœ¹ç«ã¡ãŸã--onto
ãgit rebase --onto <___> <c____> <_____>
ãã®ã¢ãããŒãã§ã¯ãåæ§ç¯ã®ããã«äžéšïŒã³ãããã®ã·ãŒã±ã³ã¹ïŒã®ã¿ãåãããšãã§ããŸããæåŸã®ããã€ãã®ã³ããããåŒãç¶ãå¿
èŠãããå Žåã«äŸ¿å©ã§ããèšé²ã«ã€ããŠãæãåºããŠãã ããHEAD~1
ã ãNæŒç®åããã€ã³ã¿ãŒã«é©çšããŠãåã®Nçªç®ã®ã³ããããæãããšãã§ããŸããHEAD~1
-ããã¯åã®ãã®ã§ãããHEAD~2
-ããã¯åã®ãã®ã§ããHEAD~5
-5åã³ãããã IDãèŠããŠããªãã®ã«äŸ¿å©ã§ããã³ãããã1ã€ã ãåæ§ç¯ããæ¹æ³ãèŠãŠã¿ãŸãããã git rebase -i --onto origin/feature/long feature/long~1 feature/long
ããã«è©³ããåæããŸãããã- ç§ãã¡ã¯æ©èœ/ãã³ã°ã«ãããŸããããã¯æ°ãããã®ãšã¯å®å
šã«ç°ãªããŸãããå¿
èŠãªã³ããããå«ãŸããŠããŸãïŒ1ãæåŸïŒ
- origin / feature / longãžã®åæ§ç¯ãåœä»€ããŸãïŒãã©ã³ãã§ã®æ°ããéå§ïŒ
- ãã©ã³ãèªäœã¯ãã®æ©èœ/é·ãã§ã
- ãããããã¹ãŠãåæ§ç¯ããå¿
èŠã¯ãããŸããïŒå
±éã®éå§ã®æ€çŽ¢ãšãã¹ãŠã®ã³ãããã®åæ§ç¯ã¯äžèŠã§ãããæ¢ã«ååšããŸãïŒããåã®ã³ãããããå§ããŸãïŒå
æ¬çã§ã¯ãããŸããïŒã ã€ãŸãæ©èœ/ãã³ã°ã1
4ã€ã®ã³ãããããã©ãã°ããå¿
èŠãããå Žåã¯ãã«ãªããŸãfeature/long~4
ã dev2(feature/long)$ git rebase -i --onto origin/feature/long feature/long~1 feature/long Successfully rebased and updated refs/heads/feature/long.
äœæ¥ãç¶ç¶ããããšã¯æ®ã£ãŠããŸãããã®å Žåãä»ã®å€ãã®å Žåã«åœ¹ç«ã€å¥ã®äŸ¿å©ãªã³ãã³ãããããŸã- git cherry-pick
ãã©ãããã§ããgitã«ã³ããããäŸé ŒããŠçŸåšã®å Žæã«é©çšããããšãã§ããŸããå¿
èŠãªã³ãããã¯ãåŒãããæšãŠããããå¯èœæ§ããããŸãã git reset --hard origin/feature/long && git cherry-pick commit_id
ä¿®æ£ããã°ã©ã
ä¿®æ£ããã°ã©ã ãå¿
èŠã§ãã§ããã ãæ©ãä¿®æ£ããå¿
èŠãããéåžžã«é倧ãªãã°ããããŸããåæã«ãããããã£ãã¯ã¹ãšäžç·ã«æåŸã®ã³ãŒãã転éããããšã¯ã§ããŸããããã¹ããããŠããããå®å
šãªãã¹ãã®æéã¯ãããŸãããå¯èœãªéãè¿
éã«ãã¹ãããããã®ä¿®æ£ã®ã¿ãå¿
èŠã§ãããããè¡ãã«ã¯ãå®çšŒåç°å¢ã«éä¿¡ãããææ°ãªãªãŒã¹ã䜿çšããŸããããã¯ãã¿ã°ãŸãã¯ãã¹ã¿ãŒãæ®ããå Žæã§ããã¿ã°ã¯ãäœãæ£ç¢ºã«åéãããã©ãã§ååŸãããããç解ããäžã§éåžžã«éèŠãªåœ¹å²ãæãããŸããã¿ã°ã¯ããŒã ã«ãã£ãŠäœæãããŸã git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
-
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
-
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
-
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
-
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
-
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
git tag '/' .
hotfix- :
hotfix tag master ( cherry-pick , - ) cherry-pick , . .
git:
dev2(feature/long)$ git checkout master Switched to branch 'master' dev2(master)$ git tag release/1.0 # , dev2(master)$ git checkout -b hotfix/1.0.x Switched to a new branch 'hotfix/1.0.x' dev2(hotfix/1.0.x)$ .. dev2(hotfix/1.0.x)$ git push origin hotfix/1.0.x Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin * [new branch] hotfix/1.0.x -> hotfix/1.0.x dev2(hotfix/1.0.x)$ git tag release/1.0.1 # dev2(hotfix/1.0.x)$ git checkout dev # Switched to branch 'dev' dev2(dev)$ git cherry-pick release/1.0.1 # id, . # , git commit dev2(dev)$ git commit [dev 9982f7b] Added rahqueiraiheinathiav 1 file changed, 1 insertion(+) dev2(dev)$ git push origin dev Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 328 bytes, done. Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/sirex/proj/git-habr/origin b21f8a5..9982f7b dev -> dev
ãã°ããç°¡åã«ã§ããŸããïŒããããã£ãã¯ã¹ã§2ã€ã®ã³ããããããå Žåcherry-pick
ãdev㧠2åè¡ãæ¹ãç°¡åãããããŸããããã ããããããå€æ°ããå Žåã¯ãã³ãã³ãgit rebase --into ...
ãåã³äœ¿çšããŠãã³ãããã®ãã§ãŒã³å
šäœãåæ§ç¯ã§ããŸããããããçš®é¡ã®æçšæ§
Gitã§ã¯ãããŸããŸãªããŒã ã®ãšã€ãªã¢ã¹ãã«ã¹ã¿ãã€ãºã§ããŸããããã¯éåžžã«äŸ¿å©ã§ãå
¥åæéãççž®ã§ããŸããããã§ã¯äŸãæããŸããããããã¯ã€ã³ã¿ãŒãããã§ãã£ã±ãã§ããèŠãŠãã ãããå€æŽãå ããåã«ãå±¥æŽãæŽçããããã«èªåã§å€æŽãåæ§ç¯ã§ããŸããããšãã°ããã°ã§ã¯æ¬¡ã®ããã«ãªããŸãã 9982f7b Finally make test works b21f8a5 Fixed typo in Test 3eabaab Fixed typo in Test e514869 Added Test for Foo b4439a2 Implemented Method for Foo 250adb1 Added class Foo
èªåèªèº«ãåæ§ç¯ããŸãããããã ãã6ã³ãããåããéå§ããŸãã dev2(dev)$ git rebase -i dev~6
ã€ã³ã¿ã©ã¯ãã£ãã¢ãŒãã§ã¯ãæåã®2ã€ã®ã³ãããã1ã€ãšæåŸã®4ã€ã®ã³ãããã«çµåïŒã¹ã«ãã·ã¥ïŒã§ããŸãã次ã«ãã¹ããŒãªãŒã¯æ¬¡ã®ããã«ãªããŸãã 0f019d0 Added Test for class Foo a3ae806 Implemented class Foo
ããã¯ãå
±æãªããžããªã«æž¡ãæ¹ãã¯ããã«åªããŠããŸããäœgit config
ãããããšãã§ããããèŠãŠãã ããgit config --global
ãå®éã®ãããžã§ã¯ãã§äœæ¥ãéå§ããåã«ããŠãŒã¶ãŒåãšã¡ãŒã«ã¢ãã¬ã¹ãèšå®ããŠãããšäŸ¿å©ã§ãã git config --global user.name sirex git config --global user.email jsirex@gmail.com
1ã€ã®ãããžã§ã¯ãã§ãå€ãã®æ©èœã®äžŠè¡éçºãå®æœããŸããããããã¯ãã¹ãŠå¥ã
ã®ãã©ã³ãã§éçºãããŸããããäžç·ã«ãã¹ãããå¿
èŠããããŸãããåæã«ããã¹ãçšã®ãã«ããªãªãŒã¹ã®æç¹ã§ã¯ãæ©èœã®æºåãæŽã£ãŠãããã©ããã¯æ確ã§ã¯ãããŸããã§ãããèŠä»¶ãå€æŽãããããé倧ãªãã°ãçºèŠããããããå¯èœæ§ããããŸããããããŠè³ªåã¯ãååãšããŠãããããã¹ãŠçµã¿åãããã«ããªãªãŒã¹åã«ãã¹ãŠãçµã¿åãããŠãã¹ãŠã®æ©èœã®äœæ¥ãç¶ããæ¹æ³ã§ããïŒè«äºïŒGitã¯ãã®åé¡ã®è§£æ±ºã«åœ¹ç«ã¡ãŸãããã®æ¹æ³ã次ã«ç€ºããŸãã- ãã«ãããªãªãŒã¹ããããã«ããã¹ãŠã®æ©èœãããŒãžãããå¥åã®ãã©ã³ããäœæãããŸããïŒ
git merge --no-ff
ïŒ - ãã©ã³ãã¯ãã¹ãçšã«æäŸãããŸãã
- éçºã¯æ¯åºã§ç¶ç¶
- æ°ããå€æŽãåã³ããŒãžãããŸããïŒ
git merge --no-ff
ïŒ - , .
- - , dev .
- , ,
çµè«
- Git , , . .
- git, , - , . .
- git " , ". . .
- . , git, git' , . , git gui plugin for %YOUR_IDE%, .
- . 2 , , - . wiki .
- , , , , , , - git .
- , , - git .
gccã¯Git Extensionsãã芧ã«ãªãããšãæšå¥šããŸãããborNfreeã¯ãå¥ã®ãœãŒã¹ããªãŒ GUIã¯ã©ã€ã¢ã³ããä¿ããŸãããzloylosã¯ãgitolanchegã®ããžã¥ã¢ã©ã€ã¶ãŒãžã®ãªã³ã¯ãå
±æããåå¿è
åãã®å¥ã®ãã¥ãŒããªã¢ã«ãåç
§ããããšãææ¡ããŸãããPSã ããã«æåã®æçš¿ããããšãã圌ãã¯éåžžäœãæžããŸããïŒå³ããå€æããªãã§ãã ãããã§ããéãæžããŸããã