---
title: Gitæ ¸å¿æ¦å¿µæ»ç»
category: å¼åå·¥å
·
tag:
- Git
---
## çæ¬æ§å¶
### ä»ä¹æ¯çæ¬æ§å¶
çæ¬æ§å¶æ¯ä¸ç§è®°å½ä¸ä¸ªæè¥å¹²æä»¶å
容ååï¼ä»¥ä¾¿å°æ¥æ¥é
ç¹å®çæ¬ä¿®è®¢æ
åµçç³»ç»ã é¤äºé¡¹ç®æºä»£ç ï¼ä½ å¯ä»¥å¯¹ä»»ä½ç±»åçæä»¶è¿è¡çæ¬æ§å¶ã
### 为ä»ä¹è¦çæ¬æ§å¶
æäºå®ä½ å°±å¯ä»¥å°æä¸ªæä»¶å溯å°ä¹åçç¶æï¼çè³å°æ´ä¸ªé¡¹ç®é½åéå°è¿å»æä¸ªæ¶é´ç¹çç¶æï¼ä½ å¯ä»¥æ¯è¾æä»¶çååç»èï¼æ¥åºæåæ¯è°ä¿®æ¹äºåªä¸ªå°æ¹ï¼ä»èæ¾åºå¯¼è´æªå¼é®é¢åºç°çåå ï¼åæ¯è°å¨ä½æ¶æ¥åäºæä¸ªåè½ç¼ºé·ççã
### æ¬å°çæ¬æ§å¶ç³»ç»
许å¤äººä¹ æ¯ç¨å¤å¶æ´ä¸ªé¡¹ç®ç®å½çæ¹å¼æ¥ä¿åä¸åççæ¬ï¼æè®¸è¿ä¼æ¹åå ä¸å¤ä»½æ¶é´ä»¥ç¤ºåºå«ã è¿ä¹åå¯ä¸ç好å¤å°±æ¯ç®åï¼ä½æ¯ç¹å«å®¹æç¯éã ææ¶å伿··æ·æå¨çå·¥ä½ç®å½ï¼ä¸ä¸å°å¿ä¼åéæä»¶æè
è¦çææ³å¤çæä»¶ã
为äºè§£å³è¿ä¸ªé®é¢ï¼äººä»¬å¾ä¹
以åå°±å¼åäºè®¸å¤ç§æ¬å°çæ¬æ§å¶ç³»ç»ï¼å¤§å¤é½æ¯éç¨æç§ç®åçæ°æ®åºæ¥è®°å½æä»¶ç忬¡æ´æ°å·®å¼ã

### éä¸åççæ¬æ§å¶ç³»ç»
æ¥ä¸æ¥äººä»¬åéå°ä¸ä¸ªé®é¢ï¼å¦ä½è®©å¨ä¸åç³»ç»ä¸çå¼åè
ååå·¥ä½ï¼ äºæ¯ï¼éä¸åççæ¬æ§å¶ç³»ç»ï¼Centralized Version Control Systemsï¼ç®ç§° CVCSï¼åºè¿èçã
éä¸åççæ¬æ§å¶ç³»ç»é½æä¸ä¸ªåä¸çéä¸ç®¡ççæå¡å¨ï¼ä¿åæææä»¶çä¿®è®¢çæ¬ï¼èååå·¥ä½ç人们é½éè¿å®¢æ·ç«¯è¿å°è¿å°æå¡å¨ï¼ååºææ°çæä»¶æè
æäº¤æ´æ°ã

è¿ä¹åè½ç¶è§£å³äºæ¬å°çæ¬æ§å¶ç³»ç»æ æ³è®©å¨ä¸åç³»ç»ä¸çå¼åè
ååå·¥ä½çè¯ç
ï¼ä½ä¹è¿æ¯åå¨ä¸é¢çé®é¢ï¼
- **åç¹æ
éï¼** ä¸å¤®æå¡å¨å®æºï¼åå
¶ä»äººæ æ³ä½¿ç¨ï¼å¦æä¸å¿æ°æ®åºç£çæååæ²¡æè¿è¡å¤ä»½ï¼ä½ å°ä¸¢å¤±æææ°æ®ãæ¬å°çæ¬æ§å¶ç³»ç»ä¹åå¨ç±»ä¼¼é®é¢ï¼åªè¦æ´ä¸ªé¡¹ç®çåå²è®°å½è¢«ä¿åå¨åä¸ä½ç½®ï¼å°±æä¸¢å¤±ææå岿´æ°è®°å½çé£é©ã
- **å¿
é¡»èç½æè½å·¥ä½ï¼** åç½ç»ç¶åµã带宽影åã
### åå¸å¼çæ¬æ§å¶ç³»ç»
äºæ¯åå¸å¼çæ¬æ§å¶ç³»ç»ï¼Distributed Version Control Systemï¼ç®ç§° DVCSï¼é¢ä¸äºã Git å°±æ¯ä¸ä¸ªå
¸åçåå¸å¼çæ¬æ§å¶ç³»ç»ã
è¿ç±»ç³»ç»ï¼å®¢æ·ç«¯å¹¶ä¸åªæåææ°çæ¬çæä»¶å¿«ç
§ï¼èæ¯æä»£ç ä»åºå®æ´å°éå䏿¥ã è¿ä¹ä¸æ¥ï¼ä»»ä½ä¸å¤ååå·¥ä½ç¨çæå¡å¨åçæ
éï¼äºåé½å¯ä»¥ç¨ä»»ä½ä¸ä¸ªéååºæ¥çæ¬å°ä»åºæ¢å¤ã å 为æ¯ä¸æ¬¡çå
éæä½ï¼å®é
ä¸é½æ¯ä¸æ¬¡å¯¹ä»£ç ä»åºç宿´å¤ä»½ã

åå¸å¼çæ¬æ§å¶ç³»ç»å¯ä»¥ä¸ç¨èç½å°±å¯ä»¥å·¥ä½ï¼å 为æ¯ä¸ªäººççµèä¸é½æ¯å®æ´ççæ¬åºï¼å½ä½ ä¿®æ¹äºæä¸ªæä»¶åï¼ä½ åªéè¦å°èªå·±çä¿®æ¹æ¨éç»å«äººå°±å¯ä»¥äºã使¯ï¼å¨å®é
使ç¨åå¸å¼çæ¬æ§å¶ç³»ç»çæ¶åï¼å¾å°ä¼ç´æ¥è¿è¡æ¨éä¿®æ¹ï¼èæ¯ä½¿ç¨ä¸å°å
å½âä¸å¤®æå¡å¨âçä¸è¥¿ãè¿ä¸ªæå¡å¨çä½ç¨ä»
ä»
æ¯ç¨æ¥æ¹ä¾¿â交æ¢â大家çä¿®æ¹ï¼æ²¡æå®å¤§å®¶ä¹ä¸æ ·å¹²æ´»ï¼åªæ¯äº¤æ¢ä¿®æ¹ä¸æ¹ä¾¿èå·²ã
åå¸å¼çæ¬æ§å¶ç³»ç»çä¼å¿ä¸åæ¯ä¸å¿
èç½è¿ä¹ç®åï¼å颿们è¿ä¼çå° Git æå
¶å¼ºå¤§çåæ¯ç®¡ççåè½ã
## è®¤è¯ Git
### Git ç®å²
Linux å
æ ¸é¡¹ç®ç»å½æ¶ä½¿ç¨åå¸å¼çæ¬æ§å¶ç³»ç» BitKeeper æ¥ç®¡çåç»´æ¤ä»£ç ã使¯ï¼åæ¥å¼å BitKeeper çåä¸å
¬å¸å Linux å
æ ¸å¼æºç¤¾åºçåä½å
³ç³»ç»æï¼ä»ä»¬æ¶åäº Linux å
æ ¸ç¤¾åºå
è´¹ä½¿ç¨ BitKeeper çæåã Linux 弿ºç¤¾åºï¼ç¹å«æ¯ Linux çç¼é è
Linus Torvaldsï¼åºäºä½¿ç¨ BitKeeper æ¶çç»éªæè®ï¼å¼ååºèªå·±ççæ¬ç³»ç»ï¼èä¸å¯¹æ°ççæ¬æ§å¶ç³»ç»åäºå¾å¤æ¹è¿ã
### Git ä¸å
¶ä»çæ¬ç®¡çç³»ç»ç主è¦åºå«
Git å¨ä¿åå对å¾
åç§ä¿¡æ¯çæ¶åä¸å
¶å®çæ¬æ§å¶ç³»ç»æå¾å¤§å·®å¼ï¼å°½ç®¡æä½èµ·æ¥çå½ä»¤å½¢å¼é常ç¸è¿ï¼çè§£è¿äºå·®å¼å°æå©äºé²æ¢ä½ 使ç¨ä¸çå°æã
ä¸é¢æä»¬ä¸»è¦è¯´ä¸ä¸ªå
³äº Git ä¸å
¶ä»çæ¬ç®¡çç³»ç»ç主è¦å·®å«ï¼**对å¾
æ°æ®çæ¹å¼**ã
**Git éç¨çæ¯ç´æ¥è®°å½å¿«ç
§çæ¹å¼ï¼èé差弿¯è¾ãæåé¢ä¼è¯¦ç»ä»ç»è¿ä¸¤ç§æ¹å¼çå·®å«ã**
大é¨åçæ¬æ§å¶ç³»ç»ï¼CVSãSubversionãPerforceãBazaar ççï¼é½æ¯ä»¥æä»¶åæ´åè¡¨çæ¹å¼åå¨ä¿¡æ¯ï¼è¿ç±»ç³»ç»**å°å®ä»¬ä¿åçä¿¡æ¯ç使¯ä¸ç»åºæ¬æä»¶åæ¯ä¸ªæä»¶éæ¶é´éæ¥ç´¯ç§¯çå·®å¼ã**
å
·ä½åçå¦ä¸å¾æç¤ºï¼ç解起æ¥å
¶å®å¾ç®åï¼æ¯å½æä»¬æäº¤æ´æ°ä¸ä¸ªæä»¶ä¹åï¼ç³»ç»é½ä¼è®°å½è¿ä¸ªæä»¶åäºåªäºæ´æ°ï¼ä»¥å¢éç¬¦å· Î(Delta)表示ã

**æä»¬ææ ·æè½å¾å°ä¸ä¸ªæä»¶çæç»çæ¬å¢ï¼**
å¾ç®åï¼é«ä¸æ°å¦çåºæ¬ç¥è¯ï¼æä»¬åªéè¦å°è¿äºåæä»¶åè¿äºå¢å è¿è¡ç¸å å°±è¡äºã
**è¿ç§æ¹å¼æä»ä¹é®é¢å¢ï¼**
æ¯å¦æä»¬çå¢éç¹å«ç¹å«å¤çè¯ï¼å¦ææä»¬è¦å¾å°æç»çæä»¶æ¯ä¸æ¯ä¼èè´¹æ¶é´åæ§è½ã
Git 䏿ç
§ä»¥ä¸æ¹å¼å¯¹å¾
æä¿åæ°æ®ã åä¹ï¼Git æ´åæ¯ææ°æ®ç使¯å¯¹å°åæä»¶ç³»ç»çä¸ç»å¿«ç
§ã æ¯æ¬¡ä½ æäº¤æ´æ°ï¼æå¨ Git ä¸ä¿å项ç®ç¶ææ¶ï¼å®ä¸»è¦å¯¹å½æ¶çå
¨é¨æä»¶å¶ä½ä¸ä¸ªå¿«ç
§å¹¶ä¿åè¿ä¸ªå¿«ç
§çç´¢å¼ã 为äºé«æï¼å¦ææä»¶æ²¡æä¿®æ¹ï¼Git ä¸åéæ°åå¨è¯¥æä»¶ï¼èæ¯åªä¿çä¸ä¸ªé¾æ¥æåä¹ååå¨çæä»¶ã Git 对å¾
æ°æ®æ´åæ¯ä¸ä¸ª **å¿«ç
§æµ**ã

### Git çä¸ç§ç¶æ
Git æä¸ç§ç¶æï¼ä½ çæä»¶å¯è½å¤äºå
¶ä¸ä¹ä¸ï¼
1. **å·²æäº¤ï¼committedï¼**ï¼æ°æ®å·²ç»å®å
¨çä¿å卿¬å°æ°æ®åºä¸ã
2. **已修æ¹ï¼modifiedï¼**ï¼å·²ä¿®æ¹è¡¨ç¤ºä¿®æ¹äºæä»¶ï¼ä½è¿æ²¡ä¿åå°æ°æ®åºä¸ã
3. **å·²æåï¼stagedï¼**ï¼è¡¨ç¤ºå¯¹ä¸ä¸ªå·²ä¿®æ¹æä»¶çå½åçæ¬åäºæ è®°ï¼ä½¿ä¹å
å«å¨ä¸æ¬¡æäº¤çå¿«ç
§ä¸ã
ç±æ¤å¼å
¥ Git 项ç®çä¸ä¸ªå·¥ä½åºåçæ¦å¿µï¼**Git ä»åº(.git directory)**ã**å·¥ä½ç®å½(Working Directory)** 以å **æååºå(Staging Area)** ã

**åºæ¬ç Git 工使µç¨å¦ä¸ï¼**
1. å¨å·¥ä½ç®å½ä¸ä¿®æ¹æä»¶ã
2. æåæä»¶ï¼å°æä»¶çå¿«ç
§æ¾å
¥æååºåã
3. æäº¤æ´æ°ï¼æ¾å°æååºåçæä»¶ï¼å°å¿«ç
§æ°¸ä¹
æ§åå¨å° Git ä»åºç®å½ã
## Git 使ç¨å¿«éå
¥é¨
### è·å Git ä»åº
æä¸¤ç§åå¾ Git 项ç®ä»åºçæ¹æ³ã
1. å¨ç°æç®å½ä¸åå§åä»åº: è¿å
¥é¡¹ç®ç®å½è¿è¡ `git init` å½ä»¤,该å½ä»¤å°å建ä¸ä¸ªå为 `.git` çåç®å½ã
2. ä»ä¸ä¸ªæå¡å¨å
éä¸ä¸ªç°æç Git ä»åº: `git clone [url]` èªå®ä¹æ¬å°ä»åºçåå: `git clone [url] directoryname`
### è®°å½æ¯æ¬¡æ´æ°å°ä»åº
1. **æ£æµå½åæä»¶ç¶æ** : `git status`
2. **æåºæ´æ¹ï¼æå®ä»¬æ·»å å°æååº**ï¼ï¼`git add filename` (é对ç¹å®æä»¶)ã`git add *`(æææä»¶)ã`git add *.txt`ï¼æ¯æéé
ç¬¦ï¼ææ .txt æä»¶ï¼
3. **å¿½ç¥æä»¶**ï¼`.gitignore` æä»¶
4. **æäº¤æ´æ°:** `git commit -m "ä»£ç æäº¤ä¿¡æ¯"` ï¼æ¯æ¬¡åå¤æäº¤åï¼å
ç¨ `git status` çä¸ï¼æ¯ä¸æ¯é½å·²æåèµ·æ¥äºï¼ ç¶ååè¿è¡æäº¤å½ä»¤ `git commit`ï¼
5. **è·³è¿ä½¿ç¨æååºåæ´æ°çæ¹å¼** : `git commit -a -m "ä»£ç æäº¤ä¿¡æ¯"`ã `git commit` å ä¸ `-a` é项ï¼Git å°±ä¼èªå¨æææå·²ç»è·è¸ªè¿çæä»¶æåèµ·æ¥ä¸å¹¶æäº¤ï¼ä»èè·³è¿ `git add` æ¥éª¤ã
6. **ç§»é¤æä»¶**ï¼`git rm filename` ï¼ä»æååºåç§»é¤ï¼ç¶åæäº¤ãï¼
7. **对æä»¶éå½å**ï¼`git mv README.md README`(è¿ä¸ªå½ä»¤ç¸å½äº`mv README.md README`ã`git rm README.md`ã`git add README` è¿ä¸æ¡å½ä»¤çéå)
### ä¸ä¸ªå¥½ç Git æäº¤æ¶æ¯
ä¸ä¸ªå¥½ç Git æäº¤æ¶æ¯å¦ä¸ï¼
```
æ é¢è¡ï¼ç¨è¿ä¸è¡æ¥æè¿°åè§£éä½ çè¿æ¬¡æäº¤
主ä½é¨åå¯ä»¥æ¯å¾å°çå è¡ï¼æ¥å å
¥æ´å¤çç»èæ¥è§£éæäº¤ï¼æå¥½æ¯è½ç»åºä¸äºç¸å
³çèæ¯æè
è§£éè¿ä¸ªæäº¤è½ä¿®å¤åè§£å³ä»ä¹é®é¢ã
主ä½é¨åå½ç¶ä¹å¯ä»¥æå 段ï¼ä½æ¯ä¸å®è¦æ³¨ææ¢è¡åå¥åä¸è¦å¤ªé¿ãå ä¸ºè¿æ ·å¨ä½¿ç¨ "git log" çæ¶åä¼æç¼©è¿æ¯è¾å¥½çã
```
æäº¤çæ é¢è¡æè¿°åºè¯¥å°½éçæ¸
æ°åå°½éçä¸å¥è¯æ¦æ¬ãè¿æ ·å°±æ¹ä¾¿ç¸å
³ç Git æ¥å¿æ¥çå·¥å
·æ¾ç¤ºåå
¶ä»äººçé
读ã
### æ¨éæ¹å¨å°è¿ç¨ä»åº
- å¦æä½ è¿æ²¡æå
éç°æä»åºï¼å¹¶æ¬²å°ä½ çä»åºè¿æ¥å°æä¸ªè¿ç¨æå¡å¨ï¼ä½ å¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤æ·»å ï¼`git remote add origin