Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
gitʹÓÃÔÓ¼Ç
 
À´Ô´£ºsegmentfault  ·¢²¼ÓÚ 2017-2-17
  1710  次浏览      27
 

ǰÑÔ

×÷Ϊһ¸ö¿ª·¢Õߣ¬Èç¹ûÏÖÔÚ»¹²»ÖªµÀgit»òÕß»¹²»»áʹÓÃgit£¬ÄÇôÄãÓ¦¸ÃºÃºÃµÄ·´Ê¡¡£×Ô¼ºÈ¥ºÃºÃ¿´Ò»±éµÄÈëÃŽéÉܰɡ£½ñÌìÖ»ÊǶÔ×Ô¼ºÔÚÈÕ³£ÖÐʹÓÃgitµÄһЩ³£ÓÃÃüÁîµÄ½éÉÜÓë×Ô¼ºÈÏΪ²»´íÇÒÄÜÌá¸ßÎÒÃǰ칫ЧÂʵÄÃüÁî¡£ÄÚÈÝ¿ÉÄÜ»áÓеãÔÓÂÒ£¬µ«¾ø¶Ô¶¼ÊǾ­µäµÄÃüÁÔڴ˼Çϱʼǣ¬Ò²Ï£ÍûÄܰïÖúÀ´ÉÍÁ³¹Ø¹ËµÄÄãÃÇ¡£

ÇøÓò

ÔÚÕâ֮ǰ£¬À´½éÉÜÒ»ÏÂgitµÄÈý¸öÇøÓò

¹¤×÷Çø(working directory)

ÔÝ´æÇø(stage index)

±¾µØÀúÊ·Çø(history)

ͨ¹ýÒ»ÕÅͼ¾ÍÄܼò½àÒ×¶®µÄÃ÷°×ËüÃÇÖ®¼äµÄת»¯¡£

clone

ÏÈ´ÓcloneÃüÁîÀ´½éÉÜ£¬Ê¹ÓùýgitµÄ¶¼ÖªµÀËü¡£git colneÃüÁîÀ­È¡Ô¶³Ì²Ö¿âµ½±¾µØ¡£µ«µ±ÎÒÃÇÒªÀ­È¡µ½Ö¸¶¨µÄÎļþ¼ÐÏÂʱ£¬Äã¿ÉÄÜ»áÖ±½Ómkdir£¬ÆäʵÎÞÐèÈç´Ë£¬Ò»ÌõÃüÁî¾ÍÄܸ㶨git clone Ô¶³Ì²Ö¿â ÎļþÃû£¬¾ÍÊÇÈç´Ë¼òµ¥¡£

rm

ÎÒÃÇÔÚ¹¤×÷ÖпÉÄÜ»áÓöµ½ÕâôһÖÖÇé¿ö£¬Ê¹ÓÃgit add .Ö±½Ó½«¹¤×÷ÇøµÄËùÓÐÐ޸ĵÄÎļþ¼ÓÈëµ½ÔÝ´æÇøÁË£¬µ«ÊǺóÃæ·¢ÏÖÓÐÒ»¸öÎļþÏȲ»Òª¼Ó½øÈ¥£¬´ËʱÎÒÃǾͿÉÒÔʹÓÃÈçÏÂÃüÁî¾Í¿ÉÒÔ½«¸ÃÎļþÍ˻ص½¹¤×÷ÇøÖС£

git rm --cached <file> 

stash

ÓÐÕâôһÖÖÇé¿ö£¬µ±ÄãÕýÔÚ¿ª·¢ÖÐʱ£¬ÓÐÒ»¸öÏßÉϵĽô¼±bugÐèÒªÐÞ¸´£¬´Ëʱ¿ª·¢ÖеŦÄÜÓÖûÓÐÍê³ÉÄã²»ÏëÌá½»£¬´ËʱÄã¿ÉÒÔʹÓÃgit stash½«¹¤×÷ÇøµÄÎļþ¶¼´æ·ÅÆðÀ´¡£ÕâʱÄã¾Í¿ÉÒÔ·ÅÐĵÄÈ¥ÇзÖÖ§ÐÞ¸´bug£¬ÐÞ¸´ÍêÖ®ºóÖ´ÐÐgit stash pop¿ÉÒÔ½«ÏÈǰ´æ·ÅµÄÈ¡³ö£¬µ±È»Ò²ÓÐһЩÆäËûµÄÏà¹ØÃüÁîÀýÈ磺git stash list²é¿´´æ·ÅµÄ¼Ç¼,git stash drop¶ªÆú´æ·ÅµÄ¼Ç¼¡£

tag

¿ÉÄÜÔÚ¿ª·¢ÖÐÎÒÃÇÒª´ò±êÇ©git tag tagName£¬²¢ÇÒÒª½«ÏàÓ¦µÄ±êÇ©ÍÆË͵½Ô¶³Ì²Ö¿âÖУ¬´Ëʱ¿ÉÒÔʹÓÃÈçÏÂÃüÁî½øÐÐÍÆËÍ¡£

git push --tags tagName 

amend

µ±ÄãcommitÒԺ󣬷¢ÏÖÓÐÒ»¸öÎļþûÓмӽøÉϴεÄcommitÖУ¬»òÕßÓÖÐÞ¸ÄÁËһЩÎļþ¡£´ËʱÄã²¢²»ÏëÔö¼ÓеÄcommitÐÅÏ¢£¬Ö»ÊÇÏ뽫Æä¼ÓÈëµ½ÉϴεÄcommitÖС£ÕâʱÄã¾Í¿ÉÒÔʹÓÃ

git commit --amend <file> 

½«ÔÝ´æÇøµÄÎļþ¼ÓÈëÆäÖÐ,²¢ÇÒÄãÒ²¿ÉÒÔÐ޸ĴËʱµÄcommitÐÅÏ¢¡£

reset

resetÒ²ÄÜʵÏÖÇ°ÃæµÄrmµÄЧ¹û£¬¿ÉÒÔʹÓÃÈçÏÂÃüÁîÀ´Ìæ´úÇ°ÃæµÄgit rm --cached <file>ÃüÁî

git reset HEAD <file> 

µ«resetÓÃ;¸ü¹ã£¬½áºÏsoft²ÎÊý¿ÉÒԻس·µ½ÈÎÒâµÄcommit½Úµã½øÐвÙ×÷

git reset --soft index 

Ö´ÐиÃÃüÁîÖ®ºó£¬¾Í»Øµ½index´¦£¬¹¤×÷Çø²»±ä¡¢ÔÝ´æÇø»Øµ½µ±Ê±µÄindex´¦¡£ÁíÍ⻹ÓÐÒ»¸öhard²ÎÊý¡£

git reset --hard index 

Óësoft¿ÉÒÔ˵¶ÔÁ¢£¬ËüµÄЧ¹û¾ÍÔÚÓÚ¹¤×÷ÇøÓëÔÝ´æÇøµÄ²»Í¬£¬Ëü»áÇå¿ÕÕâÁ½¸öÇø¡£

rebase

¶ÔÓÚrebaseÊÇÖØ¶¨ÏòµÄÒâ˼£¬Èç¹ûÄ㵱ǰµÄ·ÖÖ§ÓëÔ¶³ÌµÄ·ÖÖ§commitÐÅÏ¢´æÔÚ²îÒìʱ£¬»áÌáÐÑÄã´Ëʱ²»ÄܽøÐÐpush£¬±ØÐëÏȽ«Ô¶³ÌµÄcommitÐÅÏ¢À­È¥µ½±¾µØÀ´£¬²ÅÄܽøÐÐÌá½»¡£¶ÔÓÚÕâÖÖÇé¿ö¾Í¿ÉÒÔʹÓÃrebaseÃüÁîÁË¡£Èçϵ±Ç°´¦ÔÚdevelop·ÖÖ§

´ËʱӦ¸ÃÏÈÖ´ÐÐrebaseÃüÁî

git fetch 
git rebase origin/master

Ö´ÐÐÍêÖ®ºó£¬×îºóÔÙpushµ½Ô¶³Ìmaster

git push origin master 

×îÖÕ¸÷¸ö·ÖÖ§µÄÇé¿ö¾ÍÊÇÉÏͼµÄЧ¹ûÁË¡£Èç¹û¾õµÃÃüÁî¶àÄѼǣ¬ÕâÀïÒ²¿ÉÓÃÒ»ÌõÃüÁîÀ´Íê³ÉÉÏÃæµÄЧ¹û

git pull --rebase origin master 

ÕâÊÇrebaseµÄ¼òµ¥ÔËÓã¬Ò²Êdz£¼ûµÄÃüÁîÁË¡£ÏÂÃæ½éÉÜrebaseµÄÒ»¸ö¿ÉÑ¡²ÎÊý--onto¡£

--onto

ʹÓó¡¾°£º¿ª·¢¹ý³ÌÖÐÎÒÃǶ¼»á´´½¨²»Í¬µÄ·ÖÖ§½øÐпª·¢²»Í¬µÄ¹¦ÄÜ£¬µ±ÄãÔÚ·ÖÖ§AÉÏ´´½¨ÁËзÖÖ§B½øÐпª·¢¹¦Äܲ¢ÇÒÒ²Ìá½»ÁËһЩcommitʱ£¬´ËʱÄã·¢ÏÖÔ­À´A·ÖÖ§ÉÏÓдíÎóµÄcommit£¬Èç¹ûÒªrebaseµ½masterÉÏʱ£¬²»Äܽ«Õâ¸ö´íÎóµÄcommitÒ²¸½´øÉÏ¡£Õâ¸öʱºò¾Í¸Ã--onto´óÏÔÉñͨÁË¡£

µ±Ç°´¦ÔÚB·ÖÖ§£¬ÒªµÃµ½ÉÏÃæµÄ½á¹û£¬Ö»ÐèÖ´ÐÐÈçÏÂÃüÁî

git rebase --onto master <bµÄcommit hash code> B 

Õâ¸ö²»½ö¿ÉÒÔÕë¶Ô²»Í¬µÄ·ÖÖ§£¬Ò²ÄÜ×÷ÓÃÓÚͬһ¸ö·ÖÖ§ÉÏ¡£ËùÒÔÕë¶ÔÉÏÃæµÄÇé¿ö¿ÉÒÔÖ»¶Ô·ÖÖ§B½øÐвÙ×÷£¬µÈ¼ÛÃüÁîÈçÏ£º

git rebase --onto <aµÄcommit hash code> <bµÄcommit hash code> B 

--interactive

µ±ÎÒÃÇÒªÐÞ¸ÄcommitÐÅÏ¢µÄÃû³ÆÊ±£¬Èç¹ûÒªÐ޸ĵÄcommit´¦ÔÚµÚÒ»¸öʱ£¬¿ÉÒÔʹÓÃ

git commit --amend 

Èç¹û²»ÊǵÚÒ»¸öʱ£¬ÎÒÃǾÍҪʹÓõ½rebaseµÄ--interactive¿ÉÑ¡²ÎÊýÁË£¬¿ÉÒÔ¼òдΪ-i¡£

git rebase -i <commit hash code> 

²ÎÊýºóÃæµÄcommit hash codeΪÐèÒªÐ޸ĵÄcommitµÄǰһ¸ö¡£Ö´ÐÐÖ®ºó¾Í»á³öÏÖÈçÏÂÀàËÆµÄÐÅÏ¢£º

pick 137cf0a First coommit 
pick 163dc38 Second commit

# Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

¸ù¾ÝÌáʾÎÒÃÇ¿ÉÒÔÓÐ6¸ö¿ÉÑ¡ÔñµÄ²Ù×÷¡£ÏàÐÅÌáʾÒѾ­ËµµÄºÜÃ÷ÏÔÁË£¬¶ÔÓÚÎÒÃÇÕâÖÖÒªÐÞ¸ÄFirst coommitµÄÇé¿ö£¬ÐèҪʹÓÃr¡£

r 137cf0a First commit 
pick 163dc38 Second commit

Ö´ÐÐÖ®ºó»áÌøµ½ÐÞ¸ÃFirst coomitµÄ½çÃæ£¬½øÐÐÐ޸ļ´¿É¡£

First commit 

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Thu Jan 26 23:07:10 2017 +0800
#
# rebase in progress; onto f9aee6e
# You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
#
# Changes to be committed:
# new file: file1

ÖÁÓÚÆäËûµÄ²Ù×÷ÏÓÐÐËȤµÄ¿ÉÒÔ×Ô¼ºÈ¥³¢ÊÔһϡ£ÀýÈçs²Ù×÷¾Í¿ÉÒÔÓÃÀ´ºÏ²¢commit¡£

branch

ÏàÐÅbranch¶¼ºÜÊìϤ£¬ÎÒÕâÀïҪ˵µÄÊÇËûµÄÁíÒ»ÖÖ¿ÉÄÜ»áÓõ½µÄÇé¿ö¡£³¡¾°ÊÇÕâÑùµÄ£ºÈç¹ûÔÚÄã½øÐд´½¨ÐµķÖ֧ʱ£¬²¢²»Ïë´Óµ±Ç°µÄcommitÐÅÏ¢½Úµã½øÐд´½¨·ÖÖ§¡£

ҪʵÏÖÈçÉÏЧ¹ûÖ»ÐèÔÚ´´½¨·Ö֧ʱÔÚºóÃæÔÙÌí¼Ó¶îÍâµÄ²ÎÊý£¬¸Ã²ÎÊý¾ÍÊÇÄãËùÐèµ÷µ½µÄcommit½ÚµãµÄhash code

git branch new_branch <commit hash code>

push

ÕâÀïÌáÒ»ÏÂpushµÄ--set-upstream,ËüµÄЧ¹ûÊÇÉèÖÃÉÏÓηÖÖ§£¬µ±ÎÒÃǽ«Ô¶³Ì²»´æÔڵı¾µØ·ÖÖ§ÍÆË͵½Ô¶³Ìʱ£¬Èç¹û²»ÔÚÍÆË͵ķÖÖ§ÉÏ£¬ÎÒÃÇÒ»°ã»áʹÓÃÈçÏÂÃüÁî½øÐÐÍÆËÍ¡£

git checkout push_branch 
git push origin push_branch

ÏÂÃæÊǼò½àµÄ·½·¨£¬Ê¹ÓøòÎÊýÎÞÐèÇл»·ÖÖ§£¬¿ÉÒÔÖ±½ÓʹÓÃÈçÏÂÃüÁî½øÐÐÍÆËÍ¡£

git push --set-upstream origin push_branch 

cherry-pick

Õâ¸öÃüÁîµÄ³¡¾°ÊÇ£ºµ±ÄãËùÔڵķÖ֧ûÓã¬ÄãҪɾ³ýËü£¬µ«ÆäÖеÄÒ»¸öcommitÄ㻹ÊÇÏëÍÆË͵½Ô¶³ÌmasterÉÏ¡£

½«·ÖÖ§Çл»µ½master£¬Ö´ÐÐÒÔÏÂÃüÁ

git cherry-pick <bµÄ commit hash code> 

merge

ÎÒÃÇËùÊìÖªµÄÊÇʹÓÃmergeÀ´½øÐзÖÖ§µÄºÏ²¢£¬Ã¿´ÎʹÓÃmergeʱ¶¼»á×Ô¶¯½«¸±·ÖÖ§ºÏ²¢³ÉÒ»¸öcommit½øÐÐÍÆË͵½Ö÷·ÖÖ§ÉÏ£¬ÄÇôÈç¹ûÎÒ²»ÏëËü×Ô¶¯ÍÆË͵½Ö÷·ÖÖ§ÉÏʱ(¿ÉÄÜÎÒ»¹ÐèÒª½øÐÐÐÞ¸Ä)£¬Õâʱ¾Í¿ÉÒÔʹÓÃ--squash²Ù×÷

git merge --squash dev_branch 

Ö´ÐÐÍêÒÔÉÏÃüÁîºó£¬ÎÒÃǾͿÉÒÔÔÚÔÝ´æÇø¿´µ½Ò»¸ö»¹Î´Ìá½»µÄÎļþ״̬¡£

reflog

µ±ÎÒÃÇÇзÖ֧̫Ƶ·±ÁËÖ®ºó£¬¿ÉÄÜ»áÍüÁËһЩ·ÖÖ§ÊÇ´ÓÄĸö·ÖÖ§ÇйýÀ´µÄ£¬´Ëʱ¿ÉÒÔʹÓÃÈçÏÂÃüÁî²é¿´£º

git reflog  

894a16d HEAD@{0}:
 commit: commit another todo 
6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman
324336a HEAD@{2}: commit: commit todo
6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger
6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom
6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman
6876e5b HEAD@{6}: commit (initial): initial commit

ÕâÑùÎÒÃǾͿÉÒÔ¿´µ½ËùÓõIJÙ×÷ÀúÊ·ÁË¡£ÕâÑùÈç¹ûÎÒÃÇʹÓÃgit resetÃüÁСÐÄɾ³ýÁËÐèÒªµÄ¶«Î÷¡£¿ÉÒÔͨ¹ý´ËÀ´²éÕÒµ½É¾³ý²Ù×÷µÄhash code£¬Ö®ºó¾Í¿ÉÒÔͨ¹ýÈçÏÂÃüÁî½øÐлָ´¡£

git checkout <hash code> 

ĿǰÏëµ½µÄ¾ÍÕâЩÁË£¬Ï£ÍûÄÜÓÐËù°ïÖú

   
1710 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÿÈÕ¹¹½¨½â¾ö·½°¸
ÈçºÎÖÆ¶¨ÓÐЧµÄÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀíÖ÷Òª»î¶¯¼°ÊµÏÖ·½·¨
¹¹½¨¹ÜÀíÈëÃÅ
Ïà¹ØÎĵµ

ÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀí°×ƤÊé
CM09_CÅäÖùÜÀí±ê×¼
ʹÓÃSVN½øÐа汾¿ØÖÆ
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Èí¼þÅäÖùÜÀíµÄÎÊÌ⡢ĿµÄ
Èí¼þÅäÖùÜÀí¹æ·¶
CQWeb 7.1ÐÔÄܲâÊÔÓëµ÷ÓÅÖ¸ÄÏ
ΪʲôÐèҪʹÓÃClearCase
ClearCaseÓëRTCµÄ¼¯³É
ÀûÓÃClearQuest ½øÐвâÊÔ¹ÜÀí

²úÆ··¢²¼¹ÜÀí
ÅäÖùÜÀí·½·¨¡¢Êµ¼ù¡¢¹¤¾ß
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
ʹÓÃCCÓëCQ½øÐÐÏîĿʵ¼ù
CVSÓëÅäÖùÜÀí
Subversion¹ÜÀíÔ±

ÅäÖùÜÀíʵ¼ù£¨´Ó×éÖ¯¼¶µ½ÏîÄ¿¼¶£©
ͨºÅÔº ÅäÖùÜÀí¹æ·¶ÓëÓ¦ÓÃ
ÅäÖùÜÀíÈÕ¹¹½¨¼°³ÖÐø¼¯³É
µ¤·ð˹ ClearCaseÓëÅäÖùÜÀí
ÖйúÒÆ¶¯ Èí¼þÅäÖùÜÀí
ÖйúÒøÐÐ Èí¼þÅäÖùÜÀí
Ìì½ò»ªÒíÀ¶Ìì¿Æ¼¼ ÅäÖùÜÀíÓëPvcs