±à¼ÍƼö: |
±¾ÎÄÀ´×Ôhahack£¬ÎÄÕ½éÉÜÁËÃæÏò¸´ÔÓ¹¤³ÌµÄ¼òµ¥»¯
Git ·ÖÖ§ÒÀÀµ¹ÜÀí·½°¸µÈÏà¹ØÖªÊ¶¡£ |
|
ÐèÇóÃèÊö
ÎÒÃdz¢ÊÔʹÓà Git À´Î¬»¤Ò»¸öÏîÄ¿µÄ´úÂë¡£Õâ¸öÏîÄ¿µÄ½á¹¹±È½Ï¸´ÔÓ£º
ÏîÄ¿°üº¬Óɶà¸ö×ÓÄ£¿é£¬Ã¿¸ö×ÓÄ£¿éÊÇÒ»¸ö¶ÀÁ¢µÄ Git ²Ö¿â£¬×ÓÄ£¿é»¹ÔÊÐí¼ÌÐøÇ¶Ì×°üº¬×ÓÄ£¿é¡£
ÀýÈ磬Ö÷¹¤³ÌÒÀÀµ common¡¢framework¡¢react_native µÈ¶à¸ö×ÓÄ£¿é£¬¶ø react_native
×ÓÄ£¿éÓÖÒÀÀµ node_modules¡¢HFCommon¡¢HFModules µÈ¶à¸öǶÌ××ÓÄ£¿é¡£
[-] app_android/
|-[+] HFUIKit
|-[+] channel
|-[+] common
|-[+] framework
|-[+] hybrid
|-[+] messagecenter
|-[-] react_native
|-[+] HFCommon
|-[+] HFModules
|-[+] node_modules |
Ö÷¹¤³ÌºÍ×ÓÄ£¿éÔÊÐí´æÔÚ¶à¸ö·ÖÖ§£¬ÇÒÏ໥֮¼äÓÐÒÀÀµ¹ØÏµ¡£ÀýÈ磬Ö÷¹¤³ÌµÄ
jilin ·Ö֧ͬʱÒÀÀµ common ×ÓÄ£¿éµÄ master ·ÖÖ§£¬ÒÔ¼° framework ×ÓÄ£¿éµÄ
jilin ·ÖÖ§¡£
Git submodule µÄÎÊÌâ
Git ÌṩÁË submodule À´Ö§³Ö×ÓÄ£¿éµÄÐèÇó£¬Ê¹ÓÃËü¿ÉÒԺܷ½±ãµÄ½«¶à¸ö¶ÀÁ¢²Ö¿â°üº¬µ½Í¬Ò»¸öÖ÷¹¤³ÌÖУº
$ git init
$ git submodule add http://xxx.xxx/common.git
$ git submodule add http://xxx.xxx/framework.git |
Git submodule »¹Ö§³ÖǶÌ×Ìí¼Ó×ÓÄ£¿é£º
$ git submodule
add http://xxx.xxx/react_native.git
$ cd react_native
$ git submodule add http://xxx.xxx/HFCommon.git
$ git submodule add http://xxx.xxx/HFModules.git
$ git submodule add http://xxx.xxx/node_modules.git |
ͨ¹ý×ÓÄ£¿é£¬ÕâЩ×ÓÄ£¿é¼È¿ÉÒÔ¸÷×Ô¶ÀÁ¢µÄÐ޸ĺÍÌá½»´úÂ룬ÓÖ¿ÉÒÔ½«¸Ä¶¯×÷Óõ½ÒÀÀµËüµÄ¸¸¹¤³Ì¡£ÕâÌýÆðÀ´ÊǸöºÜ°ôµÄÌØÐÔ£¬È»¶ø
Git submodule Ò²´æÔÚ×ÅһЩÈÃÈË×¥¿ñµÄ¿Ó¡£
Ê×ÏÈ£¬Ö÷¹¤³Ì²¢²»Ö±½Ó¸ú×Ù×ÓÄ£¿éµÄ´úÂ룬¶ø½ö½öÖ»¸ú×Ù×ÓÄ£¿éµÄ commit
id µÄ¸Ä¶¯¡£ÔÚÖ´ÐÐ git submodule update ¸üÐÂ×ÓÄ£¿é´úÂëʱ£¬Git ¾ÍÊǸù¾ÝÖ÷¹¤³ÌËùά»¤µÄ
commit id À´¸üÐÂ×ÓÄ£¿éµ½Ö¸¶¨×´Ì¬µÄ¡£
bash-3.2$ git
diff react_native
diff --git a/react_native b/react_native
index 3a9c5b1..ad68a28 160000
--- a/react_native
+++ b/react_native
@@ -1 +1 @@
-Subproject commit 3a9c5b14c45b199e2e6863d2b6da22dabc2a54f5
+Subproject commit ad68a28c13d4196df531c7df8523d07358288297
(END) |
Òò´Ë£¬Èç¹ûÄãÖ»ÔÚ×ÓÄ£¿éÖÐÐ޸IJ¢Ìá½»ÁË´úÂ룬¶øÃ»Óе½Ö÷¹¤³ÌÉÏÃæÔÙ°Ñ×ÓÄ£¿éµÄ
commit id Ìύһϣ¬ÆäËûÈËÀÈ¡¹¤³Ì´úÂëµÄʱºò»á·¢ÏÖ×ÓÄ£¿éµÄ´úÂëÒÀȻͣÁôÔÚÀ쵀 commit
id ËùÖ¸ÏòµÄ״̬¡£¶ÔÓÚǶÌ××ÓÄ£¿é£¬ÕâÖÖ¹¤×÷ÓÈΪ·±Ëö£¬Ìá½»´úÂëºóÒªÖð²ãÍùÉÏÌá½» commit id
£¬·ñÔòÆäËûÈËÎÞ·¨ÕýÈ·¸üдúÂë¡£
Æä´Î£¬ÈçÇ°ÃæËù˵£¬Ê¹Óà git submodule update ¸üÐÂ×ÓÄ£¿éºó£¬×ÓÄ£¿é½«±»Çл»µ½Ò»¸öÖ¸Ïò¸¸¹¤³Ìά»¤µÄ
commit id ËùÖ¸¶¨µÄÓÎÀë״̬£º
bash-3.2$ git
submodule update react_native
bash-3.2$ cd react_native
bash-3.2$ git branch
* (detached from 3a9c5b1)
master
jilin
TaiShan |
Ò»µ©´úÂë´¦ÓÚÓÎÀë·ÖÖ§£¬Äã¾ÍҪʱ¿Ì¾¯ÌèÔÚÓÎÀë·ÖÖ§ÉϵÄÌá½»ÓÐûÓм´Ê±ºÏ²¢µ½·ÇÓÎÀë·ÖÖ§ÉÏ¡£Èç¹ûÄãÖ±½ÓÔÚÓÎÀë·ÖÖ§ÉÏ¿ª·¢²¢Ìá½»ÁË´úÂ룬֮ºóÔÚ¸¸¹¤³ÌÀïÔÙ´Î
git submodule update £¬ÄãËùÓÐδºÏ²¢µÄÌá½»¶¼»á¶ªÊ§£¡
×îºó»¹ÓÐÒ»¸ö·Ç³£Âé·³£¬µ«Ò²¼«ÈÝÒ׳öÏÖµÄÎÊÌ⣺Èç¹ûÍŶÓÀïÓÐÈËÖ»Ìá½»ÁËÖ÷¹¤³Ì¸Ã×ÓÄ£¿éµÄ
commit id £¬È´ÍüÁ˽øÈë¸ÃÄ£¿éÌύģ¿éÕæÕýµÄ´úÂ룬ÄÇôµ±ÍÆË͵½ÖÐÑë²Ö¿âÖ®ºó£¬ÆäËûÈ˾ͻáÒòΪÕÒ²»µ½Óë¸Ã
commit id ¶ÔÓ¦µÄ´úÂë¶øÎÞ·¨ÕýÈ·¸üдúÂ룺
bash-3.2$ git
submodule update
error: pathspec 'ad68a28c13d4196df531c7df8523d07358288297'
did not match any file(s) known to git.
Did you forget to 'git add'?
Unable to checkout 'ad68a28c13d4196df531c7df8523d07358288297'
in submodule path 'react_native' |
¶ÔÓÚÊìÁ·µÄÓû§£¬ÕâЩ¿Ó×ÔÈ»¿ÉÒÔÇáËÉÔ½¹ý¡£µ«¿¼Âǵ½ÍŶÓÀï´ó¶¼ÊÇ Git
ÐÂÊÖ£¬ÎÒÃÇ·¢ÏÖ×ÓÄ£¿éµÄÒýÈë¶ÔËûÃÇÔì³ÉÁ˺ܴóµÄ¸ºµ££¬Æµ·±³öÏÖ×ÓÄ£¿é´úÂëûÓиüе½×îÐÂ״̬£¬»òÕ߸üгö´íµÄÇé¿ö¡£
¼òµ¥½â¾ö·½°¸
¾¹ý¿¼ÂÇ£¬ÎÒÃǾö¶¨¶Ô×ÓÄ£¿éµÄʹÓÃ×öЩ¼ò»¯£º
ËùÓÐ×ÓÄ£¿é²»ÔÙ¸ù¾Ý¸¸¹¤³ÌµÄ commit id ¸üдúÂ룬¶øÊÇÖ±½Ó¸üе½Ö÷¹¤³ÌËùÒÀÀµµÄ·ÖÖ§µÄ×îÐÂÒ»´ÎÌá½»£»
ÓÉÓÚ commit id ²»ÔÙÓÃÀ´¸üдúÂ룬Òò´Ë¿ÉÒÔ½ûÖ¹Ö±½ÓÌá½»×ÓÄ£¿éµÄ
commit id £¬±ÜÃâ³öÏÖÖ»Ìá½»×ÓÄ£¿é commit id ¶øÍü¼ÇÌá½»×ÓÄ£¿é´úÂëµÄÇé¿ö¡£
Ôì¸öÂÖ×Ó£ºfmanager
ΪÁË´ïµ½µÚÒ»¸öÄ¿µÄ£¬ÎÒÃÇ×Ô¼ºÐ´Á˸öרÓõĹÜÀí¹¤¾ß fmanager
¡£Ä¿Ç°ËüÒ»¹²Ö§³ÖÈçϼ¸¸ö¹¦ÄÜ£¬²¢ÇÒÔÚ²»¶ÏÀ©Õ¹ÖУº
1 fmanager pull #¸üе±Ç°·ÖÖ§µÄÖ÷¹¤³Ì£¬²¢½«Ã¿¸ö×ÓÄ£¿éµÄ´úÂë¸üе½Ö¸¶¨·ÖÖ§µÄ×îÐÂ״̬¡£
2 fmanager update # ./fmanager pull
µÄ±ðÃû
3 fmanager checkout <·ÖÖ§Ãû> #
Çл»µ½Ä³¸öÖ÷¹¤³Ì·ÖÖ§£¬Í¬Ê±Íê³É×ÓÄ£¿éµÄ´úÂëÇл»¡£
4 fmanager submodule update <Ä£¿éÃûÁбí>
# ¸üÐÂÖ¸¶¨×ÓÄ£¿éµÄ´úÂëµ½Ëù´¦·ÖÖ§µÄ×îÐÂ×´¡£
5 fmanager showbranch # ²é¿´µ±Ç°Ö÷¹¤³ÌºÍËùÓÐ×ÓÄ£¿éµÄËùÊô·ÖÖ§¡£
6 fmanager status # ²é¿´µ±Ç°Ö÷¹¤³ÌºÍËùÓÐ×ÓÄ£¿éµÄÐÞ¸Ä״̬¡£
7 fmanager log # ²é¿´µ±Ç°Ö÷¹¤³ÌºÍËùÓÐ×ÓÄ£¿éµÄµ±Ç°·ÖÖ§/±êÇ©ºÍ×îÐÂÌá½»¡£
8 fmanager cherry-pick <commit
id> <·ÖÖ§Áбí> cherry-pick ij¸ö commit id µ½·ÖÖ§ÁÐ±í¡£
9 fmanager cherry-push <commit
id> <·ÖÖ§Áбí> cherry-pick ij¸ö commit id µ½·ÖÖ§ÁÐ±í£¬²¢ÍÆËÍÕâЩ·ÖÖ§¡£
Õâ¸ö¹¤¾ßÖ±½ÓÄÚÖÃÔÚÖ÷¹¤³ÌµÄ¸ù·¾¶£¬²¢ÇÒ½ÓÊÜÒ»¸ö json ¸ñʽµÄÅäÖÃÎļþ
modules.json £¬¸ÃÅäÖÃÎļþ´ó¸Å³¤ÕâÑù£º
{ "sub":
{ "app": {"branch": "master_dev"},
"common": {"branch": "master_dev"},
"fmall": {"branch": "master"},
"framework": {"branch": "jilin"},
"fund": {"branch": "master_dev"},
"hybrid": {"branch": "master_dev"},
"messagecenter": {"branch":
"master"}, "property":
{"branch": "master"},
"safetykeyboardnew": {"branch":
"master"}, "scores": {"branch":
"master"}, "thirdparty":
{"branch": "master_dev"},
"react_native": {"branch":
"jilin"}, "react_native/HFModules":
{"branch": "jilin"}, "react_native/HFCommon":
{"branch": "master_dev"},
"react_native/node_modules": {"branch":
"master"}
}
} |
²»Í¬µÄÖ÷¹¤³Ì·ÖÖ§£¬modules.json ÅäÖÃÎļþµÄÄÚÈÝÔÊÐí²»Í¬£¬ÇÒÿ¸öÄ£¿é¶¼ÔÊÐíÖ¸¶¨²»Í¬·ÖÖ§¡£¶ÔÓÚǶÌ××ÓÄ£¿é£¬ÎÒÃÇͨ¹ý¼ÓÉϸ¸Ä£¿éǰ׺À´×ö±êʶ¡£
µ±Ê¹Óà fmanager Çл»·Ö֧ʱ£¬fmanager ½«Ê×ÏÈÍê³ÉÖ÷¹¤³ÌµÄ·ÖÖ§Çл»£¬È»ºó¶ÁÈë¸Ã·Ö֧ϵÄ
modules.json £¬ÔÙ¸ù¾Ý modules.json µÄÅäÖÃÖð¸öÇл»µ½¸÷×ÔÄ£¿éµÄÖ¸¶¨·ÖÖ§¡£
ʹÓà fmanager ¸üй¤³ÌºÍÇл»·ÖÖ§ÏàËÆ£¬Ö»ÊÇ˳±ãÍê³ÉÁË×ÓÄ£¿éµÄ
git pull ²Ù×÷¡£
ÕâÑùµÄ×ÓÄ£¿é¹ÜÀí²ßÂÔ¿´ÆðÀ´Óе㡰¼¤½ø¡±£ºÓÀԶʹÓ÷ÖÖ§×îеĴúÂë״̬¡£ÎªÁ˱£Ö¤Îȶ¨ÐÔ£¬ÎÒÃÇ»¹Ö§³ÖÔÚ
modules.json ÖÐʹÓà tag £º
{ "sub":
{ "app": {"tag": "2.0.1"},
"common": {"tag": "2.0.1"},
"fmall": {"tag": "2.0.1"},
"framework": {"tag": "jilin-2.0.1"},
"fund": {"tag": "2.0.1"},
"hybrid": {"tag": "2.0.1"},
"messagecenter": {"tag": "2.0.1"},
"property": {"tag": "2.0.1"},
"safetykeyboardnew": {"tag":
"2.0.1"}, "scores": {"tag":
"2.0.1"}, "thirdparty":
{"tag": "2.0.1"}, "react_native":
{"tag": "jilin-2.0.1"},
"react_native/HFModules": {"tag":
"jilin-2.0.1"}, "react_native/HFCommon":
{"tag": "2.0.1"}, "react_native/node_modules":
{"tag": "2.0.1"}
}
} |
ÔÚÏîÄ¿ºóÆÚ£¬¿ÉÒÔͨ¹ýÒýÓñêÇ©À´±£³ÖÕû¸ö¹¤³ÌµÄÎȶ¨ÐÔ¡£Í¬Ê±£¬¸ºÔð´ò°üµÄ»úÆ÷ÿ´Î´ò°üʱ£¬¶¼»á˳±ãÖ´ÐÐ
fmanager log ²ú³öÒ»·Ý°üº¬µ±Ç°ËùÓÐ×ÓÄ£¿éËù´¦·ÖÖ§ºÍ×îÐÂÒ»´Î commit µÄ¼Ç¼£¬·½±ã×·²éÎÊÌâ¡£
¼Ó¸ö¹³×Ó£ºpre-commit
Òª´ïµ½µÚ¶þ¸öÄ¿µÄ£¬¿ÉÒÔͨ¹ý±àд±¾µØ¹³×Ó pre-commit À´ÊµÏÖ¡£¸Ã¹³×Ó¿ÉÒÔÓÃÀ´ÔÚ
commit ǰ½øÐÐһЩ¼ì²é¹¤×÷£¬²¢¾Ü¾øÒ»Ð©²»ºÏ·¨µÄÌá½»¡£Õë¶ÔÎÒÃǵÄÐèÇ󣬿ÉÒÔдһ¸ö½Å±¾¼ì²éÌá½»ÖÐÊÇ·ñ°üº¬
commit id µÄÐ޸ģ¬Èç¹ûÓУ¬¾ÍÏÈÖØÖÃÄÇЩÐÞ¸ÄÔÙÌύʣϵÄÄÚÈÝ¡£
#!/usr/bin/python
# coding: utf-8
import sys,os,io,subprocess,json,re
reload(sys)
sys.setdefaultencoding('utf8')
error_color = "\033[31m"
warning_color = "\033[33m"
normal_color = "\033[0m"
def getRootPath():
# ÕÒµ½¹¤³Ì¸ùĿ¼
git_path = ".git"
pwd = os.getcwd()
while True:
if os.path.exists(os.path.join(pwd, git_path))
and os.path.isdir(os.path.join(pwd, git_path)):
return os.path.abspath(pwd)
else:
if (os.path.exists(os.path.join(pwd, "../"))):
pwd = os.path.join(pwd, "../")
else:
return None
def getSubmoduleNameAndPath():
'''»ñÈ¡×ÓÄ£¿éÐÅÏ¢'''
root_path = getRootPath()
if root_path != None:
output = subprocess.Popen(['git submodule --quiet
foreach \'echo $toplevel/$path\''], stdout=subprocess.PIPE,
shell=True)
oc = output.communicate() #È¡³öoutputÖеÄ×Ö·û´®
submodule_dict = {}
for element in oc:
if element != None:
sb_list = element.split('\n')
for elem in sb_list:
if (elem != ""):
path = elem.strip()
name = path.replace(root_path+"/", '')
submodule_dict[name] = path
return submodule_dict
else:
print(warning_color)
print('''
¾¯¸æ£º¼ì²âµ½µ±Ç°¹¤³Ì²»ÊÇ .git ¹¤³Ì£¬ÎļþĿ¼¿ÉÄÜÒѾË𻵣¡
''')
print(normal_color)
os.chdir(pwd)
return False
def checkSubModule():
'''·ÀÖ¹Ìá½»×ÓÄ£¿éµÄ commit id'''
pwd = os.getcwd()
submodule_dict = getSubmoduleNameAndPath()
# ÅжÏÿ¸ö×ÓÄ£¿éÊÇ·ñÐÞ¸ÄÁËcommit id
for module_name, module_path in submodule_dict.items():
os.chdir(os.path.join(module_path, ".."))
module_basepath = os.path.basename(module_path)
output = subprocess.Popen(['git diff --cached
' + module_basepath], stdout=subprocess.PIPE,
shell=True)
oc = output.communicate()[0]
# ÅжÏÊÇ·ñÌá½»ÁË commit id ÐÞ¸Ä
if oc.find("-Subproject commit") >=
0 and oc.find("+Subproject commit")
>= 0:
print(warning_color)
print('''
¼ì²éµ½×ÓÄ£¿é %s Ìá½»ÁË commit id£¬
ÎÒÃÇÇ¿ÁÒ½¨Òé**²»Òª**Ìá½»×ÓÄ£¿éµÄ commit id ¸Ä¶¯£¡¸Ã commit id ½«±»Ìø¹ýÌá½»¡£
''' % module_name)
print(normal_color)
res = subprocess.call(['git', 'reset', 'HEAD',
module_basepath])
if res == 0:
print("×ÓÄ£¿é " + module_name + "
µÄ commit id ÖØÖóɹ¦£¡")
else:
print(error_color)
print("×ÓÄ£¿é " + module_name + "
µÄ commit id ÖØÖÃʧ°Ü£¡")
print(normal_color)
os.chdir(pwd)
return False
os.chdir(pwd)
return True
if checkSubModule():
exit(0)
else:
exit(1) |
¹³×Ó±àдÍ꣬»¹µÃ½â¾ö°²×°ÎÊÌâ¡£Ëùν¡°°²×°¡±£¬¼´Êǽ« pre-commit
¸´ÖƵ½¸ùĿ¼ÖÐµÄ .git/hooks Ŀ¼ÖУ¬²¢È·±£¿ÉÖ´ÐС£ÌýÆðÀ´ºÃÏñºÜ¼òµ¥£¬ÊµÔò²»È»£º
.git ÀïµÄÄÚÈݲ¢²»»áËæ²Ö¿âһͬÌá½»¡£ÐèÒªÁíÍâÏëÆäËû°ì·¨ÈÃÍŶӯäËûÈË¡°ÉϹ³¡±£¬²¢±£³Ö¹³×ÓµÄͬ²½¡£
¸¸¹¤³ÌµÄ¹³×Ó²»»á±»¼Ì³Ðµ½×ÓÄ£¿é£¬Ò²¾ÍÊÇ˵£¬Èç¹ûÄãÏ£ÍûÒ»¸ö¹³×ÓÔÚ¸¸¹¤³ÌºÍ¶à¸ö×ÓÄ£¿éÖÐÓõ½£¬ÄÇÄãÐèҪΪÿ¸ö²Ö¿â¶¼Ìí¼ÓÒ»´Î¹³×Ó¡£
fmanager °ïÎÒÃǽâ¾öÁ˵ÚÒ»¸öÎÊÌ⣬ÓÉÓÚÎÒÃÇÓÃ×Ô¼ºÔìµÄ fmanager
À´¸üй¤³Ì´úÂ룬Òò´Ë¿ÉÒÔÈà fmanager ÔÚ¸üеÄʱºò×Ô¶¯Íê³É¹³×ӵݲװ¡£
¶øÍ¨¹ý¹Û²ì .git µÄÎļþ½á¹¹£¬ÎÒ·¢ÏÖÿ¸ö×ÓÄ£¿éÔÚ .git/modules
Öи÷×ÔÓµÓÐÒ»¸öרÊôµÄÊý¾ÝĿ¼¡£Õâ¸öÊý¾ÝĿ¼ÏÂÒ²ÓÐÒ»¸ö hooks Ŀ¼£¬¸Ã×ÓÄ£¿éµÄ¹³×Ó¾ÍÓ¦¸Ã°²×°µ½ÕâÀï¡£
Èç¹ûÓÐǶÌ××ÓÄ£¿é£¬¸¸Ä£¿éµÄÊý¾ÝĿ¼Ï»¹»áÓÐ modules Ŀ¼£¬²¢ÇÒ¿ÉÒÔÒ»Ö±ÕâôǶÌ×ÏÂÈ¥¡£
½â¾öÕâÁ½¸öÎÊÌâºó£¬¹³×Ó˳Àû°²×°µ½ÁËÿ¸öÍŶӳÉÔ±µÄ²Ö¿âÖУ¬²¢ÇÒ»¹ÄÜʱ¿Ì±£³Öͬ²½¡£Ò»µ©ÓÐÈËÊÔͼÌá½»
commit id µÄÐ޸ģ¬¾Í»á³öÏÖÈçϵĴíÎó£º
ÀûÓà pre-commit ¹³×ÓʵÏÖÌø¹ý commit id Ìá½»

¶øÆäËûÄÚÈݵÄÐÞ¸ÄÒÀÈ»¿ÉÒÔÕý³£Ìá½»¡£
pre-commit ¹³×ӷdz£ÓÐÓã¬ÎÒÃÇÂ½ÐøÓÖÌí¼ÓÁËÖîÈç´úÂë·ç¸ñ¼ì²é¡¢json
ºÏ·¨ÐÔ¼ì²é¡¢commit ÓÊÏäºÏ·¨ÐÔ¼ì²éµÈ²âÊÔ¡£
×ܽá
ͨ¹ý±¾Îĵķ½·¨£¬ÎÒÃǶÔ×ÓÄ£¿éµÄʹÓýøÐÐÁ˼ò»¯£¬±ÜÃâÁËÓÉÓÚ©Ìá½»×ÓÄ£¿é
commit id »ò×ÓÄ£¿é´úÂëµ¼ÖÂÎÞ·¨¸üлò¸üдíÎóµÄÇé¿ö¡£Õâô×ö¿´ÆðÀ´ºÃÏñÍêÈ«ÅׯúÁË×ÓÄ£¿éµÄ commit
id £¬µ«ÔÚÏÂÃæµÄÎÄÕÂÖУ¬ÎÒ½«½éÉÜÒ»ÖÖ×Ô¶¯¸üÐÂ×ÓÄ£¿é commit id µÄ·½·¨£¬¸Ã·½·¨½«ÀûÓà commit
id ×Ô¶¯´¥·¢Õë¶Ô×ÓÄ£¿éµÄ³ÖÐø¼¯³É²âÊÔ¡£ |