¹«Ë¾¼¸ºõËùÓеÄÏîÄ¿¶¼ÊÇʹÓà git ²Ö¿âÀ´¹ÜÀí´úÂ룬ÒÔǰ¶Ô git Ö»ÓÐЩ·ôdzµÄÁ˽⣬ÿ´ÎÌá½»´úÂë»òÕßÉÏÏßµÄʱºò×ÜÊÇ»áÌáÐĵõµ¨£¬ÉúųöÏÖһЩδ֪µÄÎÊÌâ¡£¾¹ýÈý¸öÔµIJȿӺÍÌî¿Ó£¬
git ²Ù×÷ÆÄÏÔ³ÉÊì¡£½öÒÔ´ËÎÄ»ØÒäѧϰ git µÄÀúÊ·¡£
Ò»¡¢»ù±¾²Ù×÷
1. ¿Ë¡´úÂë
1.1 Ìí¼Ó²Ö¿â
×îÖ±½ÓµÄ·½Ê½£º
cd dir # ÕâÀï²»ÓÃн¨Ò»¸öÏîÄ¿ÃûµÄÎļþ¼Ð£¬dirΪgitÎļþ¼ÐµÄ¸¸Îļþ¼Ð git clone https://github.com/barretlee/Micro-Share |
ÄãÒ²¿ÉÒÔ½øÈëÒ»¸öĿ¼£¬È»ºó³õʼ»¯£¨init£©£º
cd path/to/Project git init # Ìí¼ÓÔ¶³ÌĿ¼ git remote add origin https://github.com/barretlee/Micro-Share |
ÕâЩ¶¼ÊÇ×î»ù±¾µÄÁË£¬ÉÏÃæµÄ remote add ÊÇÌí¼ÓÒ»¸öÔ¶³ÌĿ¼£¬ÄãÒ²¿ÉÒÔÌí¼Ó¶à¸öÔ¶³ÌĿ¼£¬Ê²Ã´Çé¿öÏ»áÌí¼Ó¶à¸öÄØ£¿±ÈÈ磺ÎÒÏë°Ñ±ðÈ˵ĴúÂë´¦ÀíÖ®ºó·Åµ½×Ô¼ºµÄ
git ²Ö¿âÉÏÈ¥,
git remote add origin https://github.com/barretlee/Micro-Share git remote add mine http://your/path/to/git # ÀȡԶ³Ì´úÂëµ½ init Ö®ºóµÄ master Ö÷¸ÉÉÏ git fetch origin master # Ð޸ĴúÂëÖ®ºó£¬Ìá½»µ½×Ô¼ºµÄ²Ö¿â git commit -am "fist" git push -u mine master |
1.2 Ìí¼ÓÎļþ
ÔÚÌá½»Îļþ֮ǰÊ×ÏÈÒªÌí¼ÓÎļþµ½·ÖÖ§ÖУ¬ºÜ¶àÈËÖ»ÖªµÀ£º
Èç¹ûÓÐÎļþɾ³ý£¬»á·¢ÏÖÕâЩɾ³ýµÄÎļþ²¢Ã»Óб»¸½¼Ó½øÈ¥£¬Ö×ô°ì£¿
#·½Ê½Ò» git add --all . #·½Ê½¶þ git add -A . |
--all ²ÎÊý£¬¹ËÃû˼Ò壬Ìí¼ÓËùÓÐÎļþ£¨change|delete|add£©
-A ²ÎÊý£¬Ìí¼ÓÐ޸ĹýºÍɾ³ý¹ýµÄÎļþ£¨change|delete£©
²»¼Ó ²ÎÊý£¬Ìí¼ÓÐ޸ĹýºÍÌí¼ÓµÄÎļþ£¨change|add£©
1.3 Ìá½»Îļþ
Èç¹ûûÓÐɾ³ý¹ýÎļþ£¬¿ÉÒԺϲ¢Ìí¼ÓºÍÌá½»ÎļþΪһ²½£º
git commit -am "add and commit" |
1.4 Ô¶³ÌÌá½»
Ìá½»µ½Ô¶³Ì²Ö¿âÉÏ£º
# ½« master Ìá½»µ½ origin ÉÏ git push origin master |
ÕâÒ»²½²Ù×÷¿ÉÄÜ»á³öÏֺܶàµÄÎÊÌ⣬±ÈÈ磺
a) originΪһ¸ö¶àÈË¿ª·¢µÄ¿â£¬±ðÈËÔÚÄãÌύ֮ǰÒѾÏò origin ÉÏÌá½»¹ýÒ»´Î£¨»òÕß¶à´Î£©£¬ÄÇô´ËʱÄãµÄ°æ±¾ÊÇÂäºóÓÚÔ¶³Ì·þÎñÆ÷°æ±¾µÄ£¬ÄãÐèÒªÏÈÀÈ¥ÏßÉÏ×îеĴúÂ룺
# ÀÈ¥Ô¶³Ì·ÖÖ§µ½ master git pull origin master |
b) Ö´ÐÐ a) Ö®ºó£¬ÓпÉÄÜÒ²»áÓÐÌáÐÑ£º´æÔÚ³åÍ»£¬ÐèÒªºÏ²¢·ÖÖ§£¬Õâ¸öÔÚºóÃæ»áÌáµ½
c) Èç¹ûÄãºÜ×ÔÐÅ£¬¾õµÃÏßÉϵİ汾ÊÇ´æÔÚÎÊÌ⣬ÄãÕâ¸ö°æ±¾Ä¾ÓÐÎÊÌ⣬Äã¿ÉÒÔÇ¿ÖÆÌá½»ÄãµÄ´úÂë
git push -u origin master -f |
ÕâÀïÐèÒªÌØ±ð×¢Ò⣬¼ÓÁË -f ÏßÉÏ֮ǰµÄÐ޸ľͻᱻɾµô£¬Çë½÷É÷ʹÓã¡
¶þ¡¢½ø½×²Ù×÷Ö¸ÄÏ
ÉÏÃæÊÇ×î»ù±¾µÄ¼¸ÌõÃüÁ³õÓà git µÄͯЬһ°ãÒ²Ö»»á½Ó´¥ÕâЩ¶«Î÷£¬ÔÚһЩ¸´ÔӵĶàÈË¿ª·¢ÏîÄ¿ÖУ¬Ð޸ĴúÂë¡¢ºÏ²¢´úÂëÊ®·ÖƵ·±£¬ÉÏÃæµÄÃüÁîÏÔÈ»ÊDz»¹»ÓÃÁË¡£ÔÚ½éÉܽø½×ÃüÁî֮ǰ£¬ÏÈÁ˽âÏÂ
git µÄÈýÖÖ״̬¡£
+-----------+ +-----------+ +-----------+
| | | | | |
| working | --> | index | --> | commit |
| | | | | |
+-----------+ +-----------+ +-----------+
¡ý ¡ý ¡ý
µ±Ç°²Ù×÷ git add git commit
|
Ä㵱ǰµÄ²Ù×÷״̬Ï£¬ËùÓÐÎļþµÄ״̬¶¼ÔÚ work ״̬£¬µ±ÄãÖ´ÐÐ git add Ö®ºó£¬Îļþ״̬±äΪ
index£¬Ò²¾ÍÊÇÔÚ git ÖÐÒѾÓйýÒ»´ÎµÇ¼ÇÁË£¬¶ø git commit Ö®ºó¾Í±»±àÈëÁË·ÖÖ§£¬³ÉΪ
commited ״̬ÁË¡£ÐèҪעÒâµÄÊÇ£¬ÕâÈýÖÖ״̬һֱ´æÔÚ£¬Ö»ÊÇ»áÓв»Í¬µÄÎļþÀ´¶ÔÓ¦ÕâЩ״̬¡£
1. ³¡¾°Çл»
Barret ÓÐÒ»ÌìÇôúÂ룬´úÂëÇÃÁËÒ»°ë£¬Boss ¸úËû˵£¬ÏßÉϳöÁ˸ö
bug£¬¸Ï½ôµÄ£¬È¥ÐÞ¸´£¡
Õ¦°ì£¿ÉÏÃæÄǶѴúÂ룬ÇÃÁ˰ë¸öÉÏÎç°¡£¬ÖØÐÂн¨Ò»¸öÎļþ¼Ð£¬È»ºó°ÑÏßÉÏ´úÂëÔÙ¿Ë¡һ´ÎÐ޸ģ¿ÕâÖÖ´¦ÀíµÄ³É±¾ÏÔȻ̫¸ßÁË£¡Æäʵ
git ΪÎÒÃÇÌṩÁ˺ܺÃÓõÄÃüÁî git stash¡£Ö»ÒªÔÚµ±Ç°Ä¿Â¼Ï²Ù×÷£º
Õâ¾äÃüÁîÖ´ÐÐÍê±ÏÖ®ºó£¬git ¹ÜÀíÇøÖÐµÄ stash »á¶à³öÒ»Ìõ¼Ç¼£¬ÕâÌõ¼Ç¼±£´æÁËÉÏÒ»´ÎÌá½»µ½Ä¿Ç°£¬ÄãËùÓеÄÐÞ¸Ä:
last commit ... working file now |
½Ó×ÅÄã¾Í¿ÉÒÔÐÞ¸ÄÄãµÄ bug ÁË£¬ÐÞ¸ÄÍêÁËÖ®ºó£¬ÔÙʹÓÃ
½«Ö®Ç°±£´æµÄÐ޸썳¡¾°£©»¹Ô»ØÀ´¡£ÆäÄÚ²¿µÄÔÀíÒ²ÊǺܼòµ¥µÄ£º
+---------------+ +-----------+ +-----------+
| | | | | | | |
| last commit | --> | working | --> | index | --> | commit |
| | | | | | | |
+---------------+ ¡ü +-----------+ +-----------+
¡ý | ¡ý ¡ý | ¡ý
ÉÏ´ÎÌá½» | µ±Ç°²Ù×÷ git add | git commit
| s|
| t|
| +---------+ a|
| | Stash 0 | s|
| +---------+ h|
+------ | Stash 1 | <------------------+
+---------+
| .... |
+---------+
| Stash n |
+---------+
¡ý
stash¶ÑÕ»
|
ÓÐЩͯЬ¿ÉÄÜ¿´²»Ì«¶®ÉÏÃæµÄͼ£¬git ÓÐÒ»¸ö³¡¾°£¨stash£©¶ÑÕ»£¬Õâ¸ö¶ÑÕ»µÄ×÷ÓÃÊÇÓÃÓÚ±£´æÐ޸ĵģ¬ÏÂÃæ¾Ù¸öÀý×Ó£º
# ½øÈëÎļþ¼Ð $ cd test # ³õʼ»¯ git $ it init # н¨ËĸöÎļþ $ touch f1 f2 f3 f4 |
ÉÏÃæ³õʼ»¯Ò»¸ö git £¬È»ºóн¨ÁËËĸöÎļþ
# ÐÞ¸Ä f1 $ echo "1" > f1 # ½«ÐÞ¸Ä push µ½ stash Õ»¶ÑÖÐ $ git stash |
ÉÏÃæÐÞ¸ÄÁËÎļþ f1£¬²¢±£´æµ½³¡¾°Õ»¶ÑÖÐ
# ²é¿´ stash Õ»¶Ñ $ git stash list stash@{0}: WIP on master: 7f58be2 3 |
²é¿´Õ»¶Ñ£¬¿ÉÒÔ¿´µ½ stash@{0}
# ÐÞ¸Ä f2 $ echo "1" > f2 # Ìí¼ÓÐÞ¸Ä $ git add . # ½«ÐÞ¸Ä push µ½ stash Õ»¶ÑÖÐ $ git stash |
ÐÞ¸ÄÎļþ f2£¬Ìí¼ÓÖ®ºó±£´æµ½Õ»¶ÑÖ®ÖÐ
# ²é¿´ stash Õ»¶Ñ $ git stash list stash@{0}: WIP on master: 7f58be2 3 stash@{1}: WIP on master: 7f58be2 3 |
Õ»¶ÑÖжàÁËÒ»¸ö stash@{1}£¬Õâ¸öʱºòÎÒÃÇÈ¥ÐÞ¸´ bug£¬¸Ä±äÆäËûλÖõĴúÂ룬ÍêÁËÖ®ºó£º
# pop Õ»¶Ñ£¬»¹ÔÐÞ¸Ä $ git stash pop |
ÉÏÃæÎÒÃǽ«Õ»¶Ñ pop ³öÀ´£¬×ñѺó½øÏȳöµÄ¹æÔò
# ²é¿´Îļþ״̬ git status $ Changes not staged for commit: changed: f2 please commit it |
ÒÔÉÏ´úÂë¶¼ÊÇÎÒÊÖ¶¯ÇóöÀ´µÄ£¬²»ÊǸ´ÖÆ¿ØÖÆÌ¨µÄ´úÂ룬´ó¸Å¾ÍÊÇÕâ¸öôÒâ˼°É¡£¹ØÓÚ stash µÄ×îºóÒ»¸öÏë˵Ã÷µÄÃüÁîÊÇ£º
Çå¿Õ³¡¾°£¨stash£©¶ÑÕ»¡£
2. ´úÂë diff
2.1 HEAD
ÔÚ½éÉÜÕâ¿é֮ǰ£¬Ò²ÐèÒªÏÈÁ˽⼸¸ö»ù±¾µÄ³£Ê¶£º
HEAD Ëü±íʾÉÏÒ»´ÎµÄ commit °æ±¾
HEAD~n Ëü±íʾµÚÉÏ n ´ÊµÄ commit °æ±¾£¬ÕâÀïµÄ n ÊÇ´óÓÚµÈÓÚ 1 µÄÕûÊý |
Èç¹ûÎÒÃÇÒª±È½ÏÉÏÒ»´ÎºÍÕâÒ»´Î´úÂëÖ®¼äµÄ²îÒ죬¿ÉÒÔ£º
±È½ÏǰµÚÈý´ÎÓëÏÖÔÚ´úÂëµÄ²îÒ죬¿ÉÒÔ£º
»ñȡǰµÚn´ÎµÄ»¹ÓÐÁíÍâÒ»ÖÖ·½Ê½£¬ÈçǰµÚ¶þ´Î£º
ǰµÚÎå´Î£º
ÕâÑùдÆðÀ´±È½ÏÀÛ£¬»¹ÊÇÇ°ÃæµÄ·½Ê½±È½Ï˳ÊÖ¡£
2.2 SHA
¹ØÓÚ SHA ±êʶµÄ½éÉÜ£¬ÎÒÕâÀï¾ÍÀÁµÃ´ò×ÖÁË£¬¿ÉÒÔ¿´ÎÒ֮ǰ·ÖÏíµÄÒ»µã¶«Î÷£¬Ê¹ÓÃ
¿ÉÒÔ¿´µ½Ã¿´Î commit µÄ SHA ±êʶ¡£Òª±È½ÏÁ½´ÎÌá½»Ö®¼äµÄ²îÒ죬¿ÉÒÔÖ±½Ó
ÆäÖÐ SHA1 ºÍ SHA2 ÊÇÁ½´ÎÌá½»£¨commit£©Ê±µÄ±êʶ¡£
2.3 Ó볡¾°µÄ±È½Ï
Õâ¸öÓõıȽÏÉÙ£¬¶Ô±ÈĿǰ´úÂë¸ú×î½üÒ»´Î push µÄ³¡¾°´úÂë²îÒ죺
´Ó×ÖÃæÉÏÒ²ºÃÀí½â£¬¾ÍÊǸú»º´æµÄÎļþ×ö¶Ô±ÈÂï~
3. °æ±¾»ØÍË
Èç¹ûÉÏÃæµÄ SHA£¬working£¬index£¬commit ¼¸ÖÖ״̬ºÍ±êʶûÓÐŪÃ÷°×£¬ÏàÐÅÕâÀïÒ²ÊÇÊ®·ÖÄÑÀí½âµÄ¡£
°æ±¾»ØÍËʹÓõÄÃüÁîÊÇ£º
3.1 ÈýÖÖ²Ù×÷
Õâ¸öÃüÁîºóÃæÊÇÒª¼Ó²ÎÊýµÄ£¬·Ö±ðΪ£º
a) filename
git reset HEAD filename # ´ÓÔÝ´æÇøÒƳýÎļþ |
Èç¹û֮ǰÓÐ add filename£¬ÉÏÃæµÄÃüÁî²Ù×÷Ö®ºó£¬filename ½«´¦ÓÚδ±» add µÄ״̬¡£Ò²¾ÍÊÇ´Ó
index ת±ä³É working ״̬¡£
b) HEAD
Ö±½Ó»ØÍ˵½Ç°µÚ n ¸ö°æ±¾¡£
c) SHA
»Øµ½ SHA ¶ÔÓ¦µÄ commit µÄ°æ±¾¡£
3.2 ÈýÖÖ·½Ê½
ÉÏÃæÎÒÃÇʹÓõÄÊÇ --hard À´ reset ´úÂ룬ÕâÑù·çÏÕÊÇÌØ±ð´óµÄ£¬ÕâÀïÓÐÈý¸ö¿ÉÑ¡²ÎÊý£º
--hard »ØÍ˰汾£¬´úÂëÒ²»ØÍË£¬ºöÂÔËùÓÐÐÞ¸Ä
--soft »ØÍ˰汾£¬´úÂë²»±ä£¬»ØÍËËùÓÐµÄ add ²Ù×÷
--mixed »ØÍ˰汾£¬´úÂë²»±ä£¬±£Áô add ²Ù×÷
4. ·ÖÖ§´¦Àí
4.1 ²é¿´·ÖÖ§
ÕâÊÇ×î¼òµ¥µÄ²é¿´£¬²é¿´±¾µØ´´½¨ÁËÄÄЩ·ÖÖ§¡£
²é¿´±¾µØ+Ô¶³Ì·ÖÖ§£¬¼°ÆäÏêϸÐÅÏ¢£¨ÉÏ´ÎÌá½»commitÐÅÏ¢£©
4.2 Ìí¼Ó·ÖÖ§
Èç¹ûÄ㵱ǰËùÔڵķÖÖ§ÊÇ master£¬´Ë´¦´´½¨µÄ·ÖÖ§»áÖ±½Ó¼Ì³Ð master µÄËùÓÐÐÞ¸ÄÀúÊ·¡£
git branch -b branchnew branchold |
-b ÊÇ base µÄÒâ˼£¬Èç¹ûÄãÓÐÁ½¸ö·ÖÖ§ A ºÍ B £¬Ä¿Ç°ÔÚ A ·ÖÖ§ÉÏ£¬ÄãÏÈн¨Ò»¸ö·ÖÖ§¼Ì³Ð
B£¬´Ë¿ÌÄãÓÐÁ½¸öÑ¡Ôñ£º
# Ñ¡ÔñÒ»
# ÏÈÇл»µ½ B ·ÖÖ§ÉÏ
git checkout B
git branch C
# Ñ¡Ôñ¶þ
git branch -b C B
|
4.3 Çл»·ÖÖ§
a) Çл»µ½±¾µØ·ÖÖ§
b) Çл»µ½Ô¶³Ì·ÖÖ§
git checkout remotes/origin/branch_name git checkout branch_name |
ÏêÇéÇ뿴֮ǰ·ÖÏíµÄÕâÆªÎÄÕ£¬gitÇл»µ½Ô¶³Ì·ÖÖ§
4.4 ɾ³ý·ÖÖ§
ÏÔÇл»µ½±ðµÄ·ÖÖ§ÉÏ£¬È»ºó
git branch -d branch_name |
Èç¹ûÊÇÔ¶³Ì·ÖÖ§£º
git push origin :branch_name |
ÔÚÐèҪɾ³ýµÄ·ÖÖ§Ç°Ãæ¼ÓÒ»¸öðºÅOKÁË£¬push ÉÏÈ¥Ö®ºó£¬·þÎñÆ÷ÉϵķÖÖ§×ÔÈ»¾Í±»É¾³ýÁË¡£
|