Git ÊÇʲô£¿
Git ÊÇÒ»¸ö·Ö²¼Ê½µÄ´úÂë¹ÜÀíÈÝÆ÷£¬±¾µØºÍÔ¶¶Ë¶¼±£ÓÐÒ»·ÝÏàͬµÄ´úÂë¡£
Git ²Ö¿âÖ÷ÒªÊÇÓÉÊÇÈý²¿·Ö×é³É£º±¾µØ´úÂ룬»º´æÇø£¬Ìá½»ÀúÊ·£¬Õ⼸ºõÊÇËùÓвÙ×÷µÄ±¾ÖÊ£¬µ«ÊÇΪÁËÎÄÕ¸ü¼Ó¼òµ¥Ò×¶®£¬¾Í²»Î§ÈÆÕâ¿éÕ¹¿ªÁË£¬ÓÐÐËȤµÄ¿ÉÒÔÈ¥Á˽âÏ¡£
¿ªÃżûɽ£¬ÎÒÃÇÖ±½ÓÀ´ËµËµ Git ÓÐÄÄЩ³£¼ûµÄ²Ù×÷¡£
Git ÓÐÄÄЩ³£¹æ²Ù×÷£¿
ÎÒÃǼòµ¥ËµËµGitÓÐÄÄЩ³£¹æ²Ù×÷£¬Äܹ»ÈÃÎÒÃÇÓ¦¸¶¼òµ¥µÄ¿ª·¢ÐèÇó¡£
¿Ë¡´úÂë
¿Ë¡Զ¶Ë´úÂë
git clone http://git.code.oa.com/QCFE/sqlserver.git |
²é¿´±¾µØµÄ´úÂë״̬
// ¿ÉÒÔÃ÷È·µÄ³ÊÏÖ³ö±¾µØ²Ö¿âµÄ״̬
// ÄÄЩÎļþ·¢Éú¸Ä¶¯£¬ÄÄЩÎļþÒѾÌá½»µ½±¾»ú
// ÒÔ¼°Ò»Ð©²Ù×÷ָʾ¡£
git status |

ͬ²½Ô¶¶Ë·ÖÖ§±ä»¯
// Àȡָ¶¨·ÖÖ§µÄ±ä»¯
git fetch origin master
// ÀÈ¡ËùÓзÖÖ§µÄ±ä»¯
git fetch
// ÀÈ¡ËùÓзÖÖ§µÄ±ä»¯£¬²¢ÇÒ½«Ô¶¶Ë²»´æÔڵķÖ֧ͬ²½ÒƳý¡¾ÍƼö¡¿
git fetch -p |
ͬ²½Ô¶¶Ë´úÂë±ä»¯¡£
// ¶¼ÊÇÏÈ git fetch£¬È»ºóÖ´Ðкϲ¢²Ù×÷
// ²»Í¬µÄÊÇ£¬git pull Ö´ÐеÄÊÇ git merge£¬git pull -r Ö´ÐеÄÊÇgit rebase
git pull origin master
git pull -r origin master |
¹ØÓÚ git merge ºÍ git rebase ¸÷×ÔµÄÓÅÁÓ£¬ºóÎÄ»áÏêϸ½éÉÜ¡£
Õⲿ·ÖÖ÷Òª½éÉÜÁ˹ØÓÚ´úÂë¿Ë¡£¬Í¬²½Ô¶¶Ë´úÂë±ä»¯µÄÏà¹Ø²Ù×÷¡£½ÓÏÂÀ´£¬ÎÒÃÇ¿´¿´¹ØÓÚ±¾µØ´úÂëµÄһЩ²Ù×÷¡£
²Ù×÷ commit
Ê×ÏÈÎÒÃÇÒªÃ÷È·Ò»¸ö¸ÅÄ¾ÍÊÇÿ¸ö commit ¶¼ÊÇÒ»·ÝÍêÕûµÄ´úÂë״̬£¬ÓÃÒ»¸ö commitID À´Î¨Ò»±êÖ¾¡£

´Óij¸ö½Ç¶ÈÉÏÀ´Ëµ£¬Gitά»¤µÄ¾ÍÊÇÒ»¸öcommitIDÊ÷£¬·Ö±ð±£´æ×Ų»Í¬×´Ì¬ÏµĴúÂë¡£
ËùÒÔÄã¶Ô´úÂëµÄÈκÎÐ޸ģ¬×îÖÕ¶¼»á·´Ó³µ½ commit ÉÏÃæÈ¥¡£
ÐÂÔö commit
// Ìí¼ÓÎļþµ½»º´æÇø£¬È»ºóÌá½»µ½±¾µØ²Ö¿â
git add files
git commit -m 'Ìá½»±¸×¢' |
³·Ïú commit
// »á½«Ìá½»¼Ç¼»Ø¹ö£¬´úÂë²»»Ø¹ö
git reset b14bb52
// »á½«Ìá½»¼Ç¼ºÍ´úÂëÈ«²¿»Ø¹ö
git reset --hard b14bb52
// ½«²¿·Ö´úÂëÎļþ»Ø¹ö
git checkout -- files |
ºÏ²¢ commit
ºÏ²¢ commit£¬±¾ÖÊÉϺϲ¢Á½·Ý²»Í¬×´Ì¬ÏµĴúÂë¡£
// Git ÌṩÁËÁ½Öֺϲ¢ commit µÄ·½Ê½
git merge master
git rebase master |
ÄÇô git rebase ºÍ git merge µ½µ×ÓÐÊ²Ã´Çø±ðÄØ£¿
mergeÊÇÁ½¸ö·ÖÖ§´¦Àí³åÍ»ºó£¬ÐÂÔöÒ»¸ö commit ×·¼Óµ½masterÉÏ¡£
rebaseÊǽ«someFeature·ÖÖ§ÉϵÄcommit¼Ç¼׷¼Óµ½Ö÷·ÖÖ§ÉÏ£¬ÖµµÃ×¢ÒâµÄÊÇ£¬Õâ¸öʱºòËûµÄcommitÆäʵÒѾ·¢Éú±ä»¯¡£

Ïà¶ÔÀ´Ëµ£¬git merge ´¦Àí³åÍ»¸üÖ±½Ó£¬¶øgit rebase Äܹ»±£Ö¤ÇåÎúµÄ commit ¼Ç¼¡£
ºÏ²¢ commit µÄʱºò£¬Í¨³£»á·¢Éú³åÍ»¡£
¿ÉÒÔÈ«¾ÖËÑË÷ÌØÊâ×Ö·û±ÈÈç<<<£¬ÕÒµ½ÐèÒª´¦ÀíµÄ´úÂëλÖã¬È»ºóÈÏÕæ·ÖÎöÓ¦¸Ã±£ÁôÄÄÒ»²¿·Ö´úÂë¡£

ÔÚÍŶÓÐ×÷µÄʱºò£¬·ÖÖ§ÊDZز»¿ÉÉٵġ£ÄÇôӦ¸ÃÈçºÎ¶Ô·ÖÖ§½øÐвÙ×÷ÄØ£¿
²Ù×÷·ÖÖ§
ËùνµÄ·ÖÖ§Æäʵ¾ÍÊÇÒ»¸öÖ¸Ïò commitID µÄÖ¸Õ룬Äã¿ÉÒÔÈ¥.git/refs/headsÀïÈ¥¿´¿´¡£

ͨ³£Çé¿öÏ£¬ÎÒÃǽ¨Òé·ÖÖ§ÖÁÉÙÄܹ»Ã÷È·µÄ±ê¼Ç¹¦ÄÜÃû³Æ£¬Èç¹ûÄܱê¼ÇÓû§¾Í¸üºÃÁË£¬±ÈÈçqixiu/feature¡£
²é¿´·ÖÖ§

¿ÉÒÔͬʱ¿´µ½±¾µØ·ÖÖ§ºÍÔ¶¶Ë·ÖÖ§£¬ÅäºÏÉÏǰÎĽéÉÜµÄ git fetch -p ¿ÉÒÔµÚһʱ¼ä²é¿´µ½×îеķÖÖ§ÐÅÏ¢¡£
ÐÂÔö±¾µØ·ÖÖ§
Æäʵ¾ÍÊÇ´´½¨Ò»¸öÖ¸ÕëÖ¸Ïòijһ¸ö commitID¡£
// git branch qixiu/feature + git checkout qixiu/feature
// ´Óµ±Ç°·ÖÖ§ÐÂÔöÒ»¸öеķÖÖ§qixiu/feature
// Ò»°ãÇé¿öÏ£¬ÎÒÃÇÓ¦¸Ã´Ómaster»òÕ߯äËûÎȶ¨·ÖÖ§À´ÐÂÔö·ÖÖ§
git checkout -b qixiu/feature // н¨·ÖÖ§
git checkout qixiu/feature // Çл»·ÖÖ§ |
ɾ³ý±¾µØ·ÖÖ§
Æäʵ¾ÍÊÇÒÆ³ýÒ»¸öÖ¸Ïò commitID µÄÖ¸Õë¡£
// ɾ³ý±¾µØ·ÖÖ§£¬Èç¹û±¾µØ»¹ÓÐδºÏ²¢µÄ´úÂ룬Ôò²»ÄÜɾ³ý git branch -d qixiu/feature // Ç¿ÖÆÉ¾³ý±¾µØ·ÖÖ§ git branch -D qixiu/feature |
ÐÂÔöÔ¶¶Ë·ÖÖ§
ͨ³£Çé¿öÏ£¬ÎÒÃÇÊÇн¨±¾µØ·ÖÖ§£¬È»ºó¸üе½Ô¶¶ËµÄ·½Ê½À´ÐÂÔöÒ»¸öÔ¶¶Ë·ÖÖ§
git push origin qixiu/feature |
ɾ³ýÔ¶¶Ë·ÖÖ§
ͬÑù£¬ÎÒÃÇÒ²ÊÇͨ¹ý¸üе½Ô¶¶ËµÄ·½Ê½À´É¾³ýÒ»¸öÔ¶¶Ë·ÖÖ§
// µÈͬÓÚgit push origin -d qixiu/feaure
git push origin :qixiu/feature |
¼òµ¥»ã×ÜÒ»ÏÂ
ÉÏÃæËµµÄ¿ÉÄÜÓÐЩ·ÖÉ¢£¬Õâ¶ù¼òµ¥×ܽáÒ»ÏÂÓÐÄÄЩ¾³£Ê¹ÓõIJÙ×÷£º
git status // ²é¿´±¾µØ´úÂë״̬
git add files // Ìí¼Ó´úÂëµ½»º´æÇø
git commit -m 'Ìá½»ÄÚÈݵı¸×¢' // Ìá½»´úÂëµ½±¾µØ²Ö¿â
git checkout -b branchName // ²»¼Ó-b¾ÍÊÇÆÕͨÇл»·ÖÖ§
git fetch -p // ͬ²½Ô¶¶Ë·Ö֧״̬
git pull -r origin branchName // fetchÔ¶¶Ë´úÂëµ½±¾µØ£¬²¢ÇÒÒÔrebaseµÄ·½Ê½ºÏ²¢´úÂë
git push origin branchName // ¸üб¾µØ´úÂëµ½Ô¶¶Ë |
ÒÔÉϼ¸ÌõÃüÁîÒѾÄܹ»Ó¦¸¶ÈÕ³£µÄ²Ù×÷£¬ÉÔ΢¸´ÔÓһЩµÄ³¡¾°ºóÎÄ»á½éÉÜ
»ùÓÚ»ù±¾²Ù×÷£¬ÔÚʵ¼ÊÏîÄ¿ÖУ¬ÎÒÃÇÓ¦¸ÃÔõôÀûÓà Git ʵÏÖÐ×÷ÄØ£¿
Git ÓÐÄÄЩ±È½ÏºÃµÄʵ¼ù£¿
Git ÓÐһЩ³ÉÊìµÄ¿ª·¢Á÷³Ì£¬±È½ÏÖ÷Á÷µÄÓÐÁ½ÖÖ£º»ùÓÚ¹¦ÄÜ·ÖÖ§µÄ¿ª·¢Á÷³Ì ºÍ GitFlow¿ª·¢Á÷³Ì¡£
Ïà¶ÔÀ´Ê±£¬ÎÒ¸üÍÆ¼öǰÕߣ¬Èç¹ûÊǸ´ÔӵĴóÐÍÏîÄ¿£¬ÍƼöGitFlow¿ª·¢Á÷³Ì¡£
½ÓÏÂÀ´£¬¼òµ¥½éÉÜÏÂÕâÁ½ÖÖÐ×÷ģʽ¡£
»ùÓÚ¹¦ÄÜ·ÖÖ§µÄÐ×÷ģʽ
»ùÓÚ¹¦ÄÜ·ÖÖ§µÄ¿ª·¢Á÷³ÌÆäʵ¾ÍÊÇÒ»¾ä»°£ºÓ÷ÖÖ§À´³ÐÔØ¹¦ÄÜ¿ª·¢£¬¿ª·¢½áÊøÖ®ºó¾ÍºÏ²¢µ½ master ·ÖÖ§¡£
ËûµÄÓŵãÊÇÄܹ»±£Ö¤master·ÖÖ§µÄÕû½à£¬Í¬Ê±»¹ÄÜÈ÷ÖÖ§´úÂëÂß¼¼¯ÖУ¬Ò²±ãÓÚ CodeReview¡£
·ÖÖ§ÃüÃû¹æ·¶
ÍÆ¼öʹÓÃÈçϸñʽ£ºownerName/featureName¡£
ÕâÑù¼È±ãÓÚÖªµÀ·ÖÖ§¸²¸ÇµÄ¹¦ÄÜ£¬Ò²±ãÓÚÕÒµ½·ÖÖ§µÄ¸ºÔðÈË¡£ÒÔºóÇåÀí·ÖÖ§µÄʱºòÒ²ºÜ·½±ã¡£
¿ª·¢Á÷³Ì
´Ó master ÇгöÒ»¸öзÖÖ§
git checkout -b qixiu/newFeature |
¿ª·¢Ò»Ð©Ð¹¦ÄÜ£¬È»ºóÌá½»
½¨Òé½Ï¶àƵ´ÎµÄÌá½»´úÂëµ½±¾µØ²Ö¿â£¬ÒÔ±ãÄܹ»¸üÁé»îµÄ±£´æ»ò³·ÏúÐ޸ġ£
´ËÍâΪÁ˱£Ö¤Ìá½»ÈÕÖ¾µÄÇåÎú£¬½¨Ò鱸עÇå³þµÄ×¢ÊÍ¡£
git status
git add files // ÌôÑ¡ÐèÒªÌá½»µÄÎļþ£¬»òÕßÈ«²¿Ìá½»
git commit -m 'Ìá½»±¸×¢'
git push origin qixiu/newFeature |
Èç¹û¹¦ÄÜ¿ª·¢Íê³É£¬¿ÉÒÔ·¢ÆðÒ»¸öCodeReviewÁ÷³Ì
Èç¹û´úÂë²âÊÔͨ¹ý£¬ºÏ²¢µ½ master£¬È»ºó×¼±¸ÉÏÏß
// ÈßÓà°æ ºÏ²¢µ½ master
git checkout master
git pull -r origin master
git checkout qixiu/newFeature
git rebase master // ´¦Àí³åÍ»
git checkout master
git merge qixiu/newFeature
git push origin master
// ¾«¼ò°æ ºÏ²¢µ½ master
git checkout qixiu/newFeature
git pull -r origin master // ½«masterµÄ´úÂë¸üÐÂÏÂÀ´£¬²¢ÇÒrebase´¦Àí³åÍ»
git push origin master // ½«±¾µØ´úÂë¸üе½Ô¶¶Ë |
Óм¸µãÐèҪעÒ⣺
²»ÒªÔÚmasterºÏ²¢´úÂ룬±£Ö¤masterµÄ¿ÉÓÃÐÔºÜÖØÒª¡£
È·±£ÔÚÕýÈ·µÄ·ÖÖ§Ö´ÐÐÕýÈ·µÄ²Ù×÷¡£
ÎÞÂÛÊÇ´¦Àí³åÍ»»¹ÊǸüÐÂÔ¶¶Ë´úÂ룬Çë±£Óо´Î·Ö®ÐÄ¡£
µ½´Ë£¬Ò»¸öÕý³£µÄ»ùÓÚ¹¦ÄÜ·ÖÖ§µÄ¿ª·¢Á÷³Ì¾ÍÍê³ÉÁË¡£½ÓÏÂÀ´¿´¿´ÁíÍâÒ»¸ö¿ª·¢Á÷³Ì¡£
GitFlow ¿ª·¢Á÷³Ì
GitFlow ±ÈǰÎĽ²µÄ»ùÓÚ¹¦ÄÜ·ÖÖ§µÄ¿ª·¢Á÷³ÌÒª¸´Ôӵö࣬Ëü¸üÊʺϴóÐ͵ĸ´ÔÓÏîÄ¿¡£
ËüÎ§ÈÆÏîÄ¿·¢²¼Á÷³Ì¶¨ÒåÁËÒ»¸öÑϸñµÄ·ÖÖ§Ä£ÐÍ£¬ËùÓеĿª·¢Á÷³Ì¶¼ÊÇÎ§ÈÆÕâ¸öÑϸñµÄ·ÖÖ§Ä£ÐͽøÐС£
¶øÕâ¸öÄ£ÐÍÔ¼¶¨ÁËÿ¸ö·ÖÖ§µÄ½ÇÉ«£¬ÒÔ¼°ËûÃÇÈçºÎ¹µÍ¨¡£
ÎÒÃÇÏÈÀ´¿´¿´ GitFlow ¿ª·¢Á÷³ÌÖм¸¸öÔ¼¶¨µÄ·ÖÖ§£¬ÒÔ¼°ËûÃǸ÷×Գе£µÄ½ÇÉ«ÊÇÔõôÑùµÄ£¿

Master·ÖÖ§£ºÓÃÓÚ´æ·ÅÏßÉϰ汾´úÂ룬¿ÉÒÔ·½±ãµÄ¸ø´úÂë´ò°æ±¾ºÅ¡£
Develop·ÖÖ§£ºÓÃÓÚÕûºÏ Feature ·ÖÖ§¡£
Feature·ÖÖ§£ºÄ³¸ö¹¦ÄܵķÖÖ§£¬´Ó Develop ·ÖÖ§Çгö£¬²¢ÇÒ¹¦ÄÜÍê³ÉʱÓֺϲ¢»Ø Develop ·ÖÖ§£¬²»Ö±½ÓºÍMaster ·ÖÖ§½»»¥¡£
Release·ÖÖ§£ºÍ¨³£¶ÔÓ¦Ò»¸öµü´ú¡£½«Ò»¸ö°æ±¾µÄ¹¦ÄÜÈ«²¿ºÏ²¢µ½ Develop ·ÖÖ§Ö®ºó£¬´Ó Develop ÇгöÒ»¸öRelease ·ÖÖ§¡£Õâ¸ö·ÖÖ§²»ÔÚ×·¼ÓÐÂÐèÇ󣬿ÉÒÔÍê³É bug ÐÞ¸´¡¢ÍêÉÆÎĵµµÈ¹¤×÷¡£Îñ±Ø¼Çס£¬´úÂë·¢²¼ºó£¬ÐèÒª½«ÆäºÏ²¢µ½ Master ·ÖÖ§£¬Í¬Ê±Ò²ÒªºÏ²¢µ½ Develop ·ÖÖ§¡£
Hotfix·ÖÖ§£º½ô¼±ÐÞ¸´µÄ·ÖÖ§£¬ÊÇΨһ¿ÉÒÔ´Ó Master ÇгöµÄ·ÖÖ§£¬Ò»µ©ÐÞ¸´ÁË¿ÉÒԺϲ¢µ½ Master ·ÖÖ§ºÍ Develop ·ÖÖ§¡£
´Óÿ¸ö·ÖÖ§µÄ¹¦ÄܺÍÔ¼¶¨¿ÉÒÔ¿´³ö£¬ËüÁ÷³Ì¶àÔ¼Êø¶à£¬¶ÔÓÚС¹æÄ£Ó¦Óò¢²»Êʺϡ£
µ±È» GitFlow ÓÐһЩ¸¨Öú¹¤¾ß gitflow ¿ÉÒÔ×Ô¶¯»¯µÄÍê³ÉÕâЩÈÎÎñ£¬¶ÔÓÚ´óÐÍÏîĿҲºÜÓаïÖú¡£
Ç°Ãæ½²ÁË Git ÓÐÄÄЩ»ù±¾²Ù×÷£¬È»ºó½éÉÜÁËÁ½¸öÖ÷Á÷µÄ¹¤×÷Á÷³Ì¡£
½ÓÏÂÀ´ÎÒÃÇ¿´¿´ Git ÓÐÄÄÐ©ÌØ±ðµÄ¼¼ÇÉÖµµÃÒ»Ìá¡£
Git ÓÐÄÄЩС¼¼ÇÉ£¿
Git ²Ù×÷³ýÁË»ù±¾µÄ´úÂë¹ÜÀí¹¦ÄÜ£¬»¹ÓÐһЩС¼¼ÇÉÄܹ»ÈÃÄãÑÛǰһÁÁ¡£
git reflog£¬²é¿´²Ù×÷¼Ç¼
Õâ¸öÎÒÒ»¶¨Òª·ÅÔÚµÚÒ»¸ö½éÉÜ£¬ÒòΪËüÔø¾Êý´Î½â¾ÈÁËÎҵĴúÂë

×Ðϸ¿´ÉÏͼ£¬reflog ¼Ç¼ÁËÄãËùÓÐµÄ git ÃüÁî²Ù×÷£¬¶ÔÓÚ¸´ÔijЩĪÃûÆäÃîµÄ³¡¾°»òÕ߻عöÎó²Ù×÷Óм«´óµÄ°ïÖú¡£
ÊÔÏëÒ»¸ö³¡¾°£ºÄãʹÓà git reset --hard commitID °Ñ±¾µØ¿ª·¢´úÂë»Ø¹öµ½ÁËÒ»¸ö֮ǰµÄ°æ±¾£¬¶øÇÒ»¹Ã»ÓÐÍÆµ½Ô¶¶Ë£¬Ôõô²ÅÄÜÕһضªÊ§µÄ´úÂëÄØ£¿
ÄãÈç¹ûʹÓà git log ²é¿´Ìá½»ÈÕÖ¾£¬²¢²»ÄÜÕһضªÆúµÄÄÇЩ commitID¡£
¶ø git reflog È´ÏêϸµÄ¼Ç¼ÁËÄãÿ¸ö²Ù×÷µÄ commitID£¬¿ÉÒÔÇáÒ×µÄÈÃÄ㸴Ե±Ê±µÄ²Ù×÷²¢ÇÒÕһضªÊ§µÄ´úÂë¡£
µ±È»£¬Èç¹ûÄ㶪ʧµÄ´úÂ붼ûÓÐÌá½»¼Ç¼£¬ÄÇô¹§Ï²Ä㣬ÄãµÄ´úÂëÕæµÄ¶ªÁË¡£
ѹËõÌá½»¼Ç¼
ÕâÒ²ÊÇÒ»¸öºÜʵÓõŦÄÜ£¬Ç°ÎÄÌá¹ý£¬ÎÒÃÇÔÚ¿ª·¢ÖеÄʱºò¾¡Á¿±£³ÖÒ»¸ö½Ï¸ßƵÂʵĴúÂëÌá½»£¬ÕâÑù¿ÉÒÔ±ÜÃⲻСÐÄ´úÂ붪ʧ¡£µ«ÊÇÕæÕýºÏ²¢´úÂëµÄʱºò£¬ÎÒÃDz¢²»Ï£ÍûÓÐÌ«¶àÈßÓàµÄÌá½»¼Ç¼£¬¶øÇÒ rebase ºÏ²¢´úÂëµÄʱºò£¬»á°Ñÿ¸ö commit ¶¼´¦Àíһϣ¬ÓÐʱºò»áÔì³ÉÈßÓàµÄ¹¤×÷¡£
ËùÒÔ£¬Ñ¹ËõÈÕÖ¾Ö®ºó²»¾ÄÜÈà commit ¼Ç¼·Ç³£Õû½à£¬Í¬Ê±Ò²±ãÓÚʹÓà rebase ºÏ²¢´úÂë¡£
ÄÇô£¬ÈçºÎѹËõcommit¼ÇÂ¼ÄØ£¿
ʹÓà git log ÕÒµ½Æðʼ commitID
git reset commitID£¬ÇмDz»ÒªÓà --hard²ÎÊý
ÖØÐÂ git add && git commit
git push -f origin branchName£¬ÒòΪ»áÓгåÍ»£¬ËùÒÔÐèÒªÇ¿ÖÆ¸²¸ÇÔ¶¶Ë·ÖÖ§£¬ÇëÎñ±Ø½÷É÷¡£
ºÏ²¢µ½ master ÖУ¬È»ºó¸üÐÂÔ¶¶Ë master¡£
´ËÍ⻹ÓÐÁ½ÖÖѹËõÈÕÖ¾µÄ°ì·¨£º
git commit --amend£º×·¼Ó commit µ½ÉÏÒ»¸ö commit ÉÏ¡£
git rebase -i£ºÍ¨¹ý½»»¥Ê½µÄ rebase£¬Ìṩ¶Ô·ÖÖ§ commit µÄ¿ØÖÆ£¬´Ó¶ø¿ÉÒÔÇåÀí»ìÂÒµÄÀúÊ·¡£

´Óʵ¼ÊÓ¦ÓÃÀ´Ëµ£¬ÈýÖÖÈÕ־ѹËõ¶¼ºÜÓÅÐ㣬git reset¸ü¼òµ¥£¬git rebase -i¸üϸÄå¡£
git rebase£¬ºÏ²¢´úÂë
ǰÎļòµ¥½éÉÜÁËgit rebaseºÍ git merge µÄÇø±ð£¬Ì¹Âʽ²£¬ËûÃǸ÷ÓÐÓÅÁÓ¡£
git rebaseÄÜÈÃÄãµÄ commit ¼Ç¼·Ç³£Õû½à£¬ÎÞÂÛÊÇÏßÉϻعö»¹ÊÇ CodeReview ¶¼¸üÇáËÉ£»µ«È´ÊÇÒ»¸öÓÐÒþ»¼µÄ²Ù×÷£¬Ê¹ÓÃʱÎñ±Ø½÷É÷¡£
git merge ²Ù×÷¸ü°²È«£¬Í¬Ê±Ò²¸ü¼òµ¥£»µ«È´»áÔö¼ÓһЩÈßÓàµÄ commit ¼Ç¼¡£
Õâ¶ù¼òµ¥ËµËµ rebase µÄºÏ²¢Á÷³ÌºÍ×¢ÒâÊÂÏî°É¡£¿´ÏÂͼ

ÓÐÈý¸öµãÐèҪעÒ⣺
rebase ÏÈÕÒ³ö¹²Í¬µÄ׿ÏȽڵã
´Ó׿ÏȽڵã°Ñ pay ·ÖÖ§µÄÌá½»¼Ç¼ժÏÂÀ´£¬È»ºó rebase µ½ master ·ÖÖ§
rebase Ö®ºóµÄ commitID ÆäʵÒѾ·¢ÉúÁ˱仯
ÓÈÆäÊǵÚÈýµã£¬¾³£»áÈÃÈËÎó²Ù×÷£¬ËùÒÔÎñ±Ø×¢Òâ¡£
ÊÔÏëһϣ¬¿ª·¢¹ý³ÌÖУ¬Èç¹ûÎÒÃÇÆµ·±µÄ rebase master ·ÖÖ§£¬»áÓÐʲôºó¹ûÄØ£¿

µ±Äã²»¶Ï rebase master µÄʱºò£¬ÆäʵÄã±¾µØµÄ d ¶¼±ä³ÉÁË d' £¬ÔÙÒªºÍÔ¶¶Ë pay ·ÖÖ§±£³ÖÒ»Ö£¬ÄãµÄ±¾µØ·ÖÖ§ commit ¼Ç¼ÒѾ²»¿°ÈëÄ¿ÁË¡£
ÁíÍâҪעÒ⣬¾ø²»ÒªÔÚ¹«¹²µÄ·ÖÖ§ÉÏʹÓà rebase£¡£¡£¡

ËùÒÔ£¬ÎªÁ˰²È«£¬ÍŶӿÉÒÔ¿¼ÂDzÉÓà merge¡£
pull request£¬·½±ãCodeReview
Git ²»½öÌṩÁË´úÂëÍйÜÒÔ¼°´úÂ뿪·¢µÄ°ïÖú£¬»¹ÌṩÁË´úÂëÉóºËÀàËÆµÄ¹¦ÄÜ¡£
µ±ÎÒÃÇÔÚ¹¦ÄÜ·ÖÖ§¿ª·¢Íê³ÉÖ®ºó£¬¿ÉÒÔ·¢ÆðÒ»¸ö pull request ÇëÇó£¬Ñ¡ÔñÐèÒª¶Ô±ÈµÄÁ½¸ö·ÖÖ§

Ëü»á´´½¨Ò»¸ö pull request£¬Öƶ¨Ïà¹ØÈËÔ±À´¶Ô´úÂë½øÐÐ review¡£
ͨ³£Çé¿öÏ£¬ÍŶÓÓ¦¸Ã¹ÄÀø½»²æ review£¬Éæ¼°µ½¹«¹²´úÂëµÄʱºò£¬Ò»¶¨ÒªÈÃÏà¹ØÈË review¡£
git hook£¬Git µÄÉúÃüÖÜÆÚ
Õâ¸ö´ó¶àÊýÈËÓ¦¸Ã¶¼£¬Ìý˵¹ý£¬git²Ù×÷ÓÐËü×ÔÉíµÄÉúÃüÖÜÆÚ£¬ÔÚ²»Í¬µÄÉúÃüÖÜÆÚ£¬ÎÒÃÇ¿ÉÒÔ×öһЩ×Ô¶¯»¯µÄÊÂÇé¡£
¾ÙÁ½¸ö¼òµ¥µÄÀý×Ó£º
pre-commitµÄʱºòÎÒÃÇ¿ÉÒÔ×ö eslint
post-commitµÄʱºò£¬ÎÒÃÇ¿ÉÒÔ×öÀûÓà jenkins ÀàËÆµÄ¹¤¾ß×ö³ÖÐø¼¯³É
µ±È»»¹Óиü¶àµÄÉùÃ÷ÖÜÆÚ£¬¾ßÌå¿ÉÒԲο¼ Git ¹³×Ó
git submodule && git subtree£¬¹ÜÀíµÚÈý·½Ä£¿é
ÕâÁ½¸öÃüÁîͨ³£ÓÃÀ´¹ÜÀí¹«ÓõĵÚÈý·½Ä£¿é¡£±ÈÈçһЩͨÓõĵײãÂß¼¡¢Öмä¼þ¡¢»¹ÓÐһЩ¿ÉÄÜ»áÆµ·±±ä»¯µÄͨÓÃÒµÎñ×é¼þ¡£
µ±È»£¬Á½Õß»¹ÊÇÓÐÇø±ðµÄ¡£
git submodule Ö÷ÒªÓÃÀ´¹ÜÀíһЩµ¥Ïò¸üÐµĹ«¹²Ä£¿é»òµ×²ãÂß¼¡£
git subtree ¶ÔÓÚ²¿·ÖÐèҪ˫Ïò¸üеĿɸ´ÓÃÂß¼À´Ëµ£¬ÌرðÊʺϹÜÀí¡£±ÈÈçһЩÐèÒª¸´ÓõÄÒµÎñ×é¼þ´úÂë¡£ÔÚÎÒ֮ǰµÄʵ¼ùÖУ¬ÎÒÒ²ÔøÓÃsubtreeÀ´¹ÜÀí¹¹½¨ÏµÍ³Âß¼¡£
git alias£¬¼ò»¯ Git ÃüÁî
ÎÒÃÇ¿ÉÒÔͨ¹ýÅäÖà git alias À´¼ò»¯ÐèÒªÊäÈëµÄ Git ÃüÁî¡£
±ÈÈçǰÎÄµÄ git subtree ÐèÒªÊäÈëºÜ³¤µÄ Git ÃüÁÎÒÃÇ¿ÉÒÔÅäÖà .git/config ÎļþÀ´½â¾ö¡£
// git stpull appfe demo/xxx
// git stpush appfe demo/xxx
[alias]
stpull = !git subtree pull --prefix=$1 appfe $2 \
&& :
stpush = !git subtree pull --prefix=$1 appfe $2 \
&& git subtree split --rejoin --prefix=$1 $2 \
&& git subtree push --prefix=$1 appfe $2 \
&& : |
×ܽá˵µãɶ£¿
¸ÃÎÄÊ×ÏȽéÉÜÁË Git ³£¹æ²Ù×÷
°üÀ¨¿Ë¡´úÂë¡¢²Ù×÷ commit¡¢²Ù×÷·ÖÖ§µÈ¡£Æäʵ Git ³£¹æ²Ù×÷µÄÃüÁî²¢²»¶à£¬Çë¿´µÚÒ»²¿·ÖµÄ¼òµ¥×ܽᡣ
Æä´Î½éÉÜÁË Git ¿ª·¢Á÷³Ì
¸Ã²¿·ÖÖ÷Òª½éÉÜÁËÁ½ÖÖÖ÷Á÷µÄ¿ª·¢Ä£Ê½£º±È½ÏÇáÁ¿µÄ »ùÓÚ¹¦ÄÜ·ÖÖ§µÄ¿ª·¢Á÷³Ì ºÍÊʺϸ´ÔÓÏîÄ¿µÄ GitFlow ¿ª·¢Á÷³Ì £¬Á½ÖÖģʽ¸÷ÓÐʹÓõij¡¾°£¬¶ÔÓÚ³£¹æÊ¹Óã¬Ç°Õß¾ÍÒѾ×ã¹»ÁË¡£
×îºó½éÉÜÁËһЩ Git ʵÓü¼ÇÉ
Ö÷Òª°üÀ¨£ºreflog ²Ù×÷£¬Ñ¹ËõÈÕÖ¾£¬rebase µÄ×¢ÒâÊÂÏÀûÓà pull request ×ö codeReview£¬ÀûÓà git hook ×öһЩ×Ô¶¯»¯¹¤×÷µÈ¡£
|