常用客戶端:Gitkraken次绘, Fork扮饶, Github 客戶端
(一) Git 命令
1. 初始化 Git
進(jìn)入到自己想創(chuàng)建版本庫(kù)的目錄
-
輸入指令:
git init
的目錄,這個(gè)目錄就是Git用來(lái)跟蹤管理版本庫(kù)的乏冀。
3. 文件添加進(jìn)遠(yuǎn)程代碼庫(kù)
-
git add <文件名>
將文件名為filename
的文件添加進(jìn)倉(cāng)庫(kù)妥衣,可以多個(gè)文件名并列赘阀,用空格隔開 - 初次提交可以直接使用
git add .
將當(dāng)前所有文件添加進(jìn)倉(cāng)庫(kù) -
git commit -m "describe it"
將文件提交到本地分支倉(cāng)庫(kù)的操作万细,后面加的是日志扑眉。 -
git add remote origin <遠(yuǎn)程倉(cāng)庫(kù)地址>
添加遠(yuǎn)程倉(cāng)庫(kù)地址 -
git pull --rebase origin master
如果在遠(yuǎn)程倉(cāng)庫(kù)中創(chuàng)建了諸如 README.md 等文件,需要先進(jìn)行這不操作赖钞,保證本地也同步到遠(yuǎn)程的文件 -
git push -u origin master
將本地代碼推送到遠(yuǎn)程代碼庫(kù)
4. 提交和更新代碼操作
-
git add <文件名>
先把要更新的文件加入暫存區(qū)腰素,,相應(yīng)還有git add .
(提交新文件和被修改文件雪营,不包括被刪除文件)弓千、git add --all
(提交所有變化) 和git add -u
(提交被修改和被刪除文件,不包括新文件) -
git commit -m "describe it"
提交到本地分支倉(cāng)庫(kù) -
git push -u <分支名>
推送到遠(yuǎn)程代碼倉(cāng)庫(kù) -
git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
更新代碼献起,如果有沖突需要在本地提交
5. 日常模式總結(jié)
- 首先计呈,用
git push origin branch-name
推送自己的修改砰诵; - 如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新捌显,需要先用
git pull
試圖合并; - 如果合并有沖突总寒,則解決沖突扶歪,并在本地提交;
- 沒(méi)有沖突或者解決掉沖突后摄闸,再用
git push origin branch-name
再次推送 - 如果
git pull
提示 “no tracking information”善镰,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name
年枕。
6. 常用指令
-
git status
可以隨時(shí)倉(cāng)庫(kù)當(dāng)前狀態(tài)炫欺,查看已經(jīng)命令過(guò)但還未經(jīng)提交到倉(cāng)庫(kù)的所有操作,可以看成是待處理事項(xiàng)列表 -
git diff
可以看到具體修改了哪些內(nèi)容 -
git log
查看對(duì)倉(cāng)庫(kù)的操作記錄 -
git rm <filename>
刪除文件熏兄,如果確認(rèn)刪除品洛,刪除后需要進(jìn)行git commit -m "describe it"
操作,保證本地分支同步摩桶;如果需要回復(fù)刪除文件需要用git checkout --<filename>
操作桥状,從分支倉(cāng)庫(kù)中回復(fù)文件到暫存區(qū) -
git clone git@server-name:path/repo-name.git
從遠(yuǎn)程代碼倉(cāng)庫(kù)克隆代碼 -
git branch
查看本地分支 -
git branch -r
查看遠(yuǎn)程分支 -
git branch <本地分支名>
創(chuàng)建本地分支 -
git checkout <本地分支名>
切換到相應(yīng)本地分支 -
git branch -d <本地分支名>
刪除分支 -
git merge <本地分支名>
與當(dāng)前分支進(jìn)行合并 -
git reset HEAD
取消緩存在暫存區(qū)的文件 -
git tag
查看版本 -
git tag <版本號(hào)>
創(chuàng)建新版本 -
git tag -d <版本號(hào)>
刪除版本
(二) Git 基本概念
1. 版本回退: git reset
- 每一次
commit
都是對(duì)應(yīng)一個(gè)版本 -
commit id
是對(duì)版本的具體標(biāo)識(shí) -
HEAD
表示當(dāng)前版本 -
HEAD^
表示上一個(gè)版本 -
HEAD^^
表示上上版本 -
HEAD~100
表示前100個(gè)版本 -
git reset --hard commitId
回退到版本號(hào)為commitId
的地方,也可以用HEAD
的形式表示硝清。 - 穿梭前辅斟,用
git log
查看提交歷史,以便確定要回退到哪個(gè)版本芦拿。 - 重返未來(lái)士飒,用
git reflog
查看命令歷史,以便確定要回到未來(lái)的哪個(gè)版本蔗崎。
2. 工作區(qū)和暫存區(qū)
-
先上一張很經(jīng)典的圖
?
?
?
工作區(qū):就是我們?cè)陔娔X中實(shí)際看到的酵幕;
版本庫(kù):工作區(qū)中的隱藏目錄
.git
,就是版本庫(kù)蚁趁;暫存區(qū):暫存區(qū)的概念很重要裙盾,理解暫存區(qū)之后對(duì)于Git的版本管理會(huì)有一個(gè)比較清晰的思路。
master: 這是Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支他嫡。
我覺(jué)得如果把工作區(qū)看成是鍵盤終端輸入番官,版本庫(kù)中的
master
可以看成是電腦硬盤,我們輸入的內(nèi)容首先是到緩存中的钢属,并不是直接存入硬盤徘熔。當(dāng)緩存區(qū)滿或者人為發(fā)送指令時(shí)才會(huì)將緩存區(qū)的內(nèi)容寫入硬盤。-
以添加和文件修改為例淆党,
git add
指令只是選中文件或者其他要提交的修改酷师,將它們添加進(jìn)暫存區(qū)讶凉。只有使用git commit
指令的時(shí)候,才將暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支山孔。?
(三) 分支管理
1. 分支需求描述
- 不完整的改動(dòng)可以先放到分支上懂讯,這樣別人看不到分支的內(nèi)容,不會(huì)相互影響台颠『滞可以直到開發(fā)完畢后,再一次性合并到原來(lái)的分支上.
- 一開始的時(shí)候串前,master分支是一條線瘫里,Git用master指向最新的提交,再用HEAD指向master荡碾,就能確定當(dāng)前分支谨读,以及當(dāng)前分支的提交點(diǎn):
只有一條master時(shí)間線
2. 創(chuàng)建、合并和刪除分支
2.1 原理
-
創(chuàng)建新的分支:
當(dāng)我們創(chuàng)建新的分支坛吁,例如dev時(shí)劳殖,Git新建了一個(gè)指針叫dev,指向master相同的提交阶冈,再把HEAD指向dev闷尿,就表示當(dāng)前分支在dev上:
?
?
創(chuàng)建新的分支dev
-
Git創(chuàng)建一個(gè)分支很快,增加一個(gè)dev指針女坑,改改HEAD的指向. 從現(xiàn)在開始填具,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了,比如新提交一次后匆骗,dev指針往前移動(dòng)一步劳景,而master指針不變:
?
?
對(duì)工作區(qū)的修改和提交
-
合并分支:
把dev合并到master上, 最簡(jiǎn)單的方法就是直接把master指向dev的當(dāng)前提交,就完成了合并:
?
?
合并分支
-
刪除分支:
刪除dev分支就是把dev指針給刪掉碉就,刪掉后就剩下了一條master分支:
?
?
刪除分支
2.2 實(shí)戰(zhàn)
- take
dev
as an example - 創(chuàng)建分支:
git branch dev
- 切換到分支:
git checkout dev
- 創(chuàng)建+切換分支:
git checkout -b dev
- 查看當(dāng)前分支:
git branch
- 切換到master分支:
git checkout master
- 合并指定分支到當(dāng)前分支:
git merge dev
- 刪除分支:
git branch -d dev
-
git log --graph
命令可以看到分支合并圖盟广。
3. 分支策略
在實(shí)際開發(fā)中,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:
master分支應(yīng)該是非常穩(wěn)定的瓮钥,也就是僅用來(lái)發(fā)布新版本筋量,平時(shí)不能在上面干活;
干活都在dev分支上碉熄,也就是說(shuō)桨武,dev分支是不穩(wěn)定的,到某個(gè)時(shí)候锈津,比如1.0版本發(fā)布時(shí)呀酸,再把dev分支合并到master上,在master分支發(fā)布1.0版本琼梆;
-
你和你的小伙伴們每個(gè)人都在dev分支上干活性誉,每個(gè)人都有自己的分支窿吩,時(shí)不時(shí)地往dev分支上合并就可以了。
4.所以错览,團(tuán)隊(duì)合作的分支看起來(lái)就像這樣:?
?
團(tuán)隊(duì)合作分支
4. Bug分支
- 修復(fù)bug時(shí)纫雁,我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并倾哺,最后刪除先较;
- 當(dāng)工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng)
git stash
一下悼粮,然后去修復(fù)bug. - 修復(fù)后,再
git stash pop
曾棕,回到工作現(xiàn)場(chǎng)扣猫。 - 要丟棄一個(gè)沒(méi)有被合并過(guò)的分支,可以通過(guò)
git branch -D <name>
強(qiáng)行刪除翘地。
5. 多人協(xié)作
5.1 基本命令
當(dāng)從遠(yuǎn)程倉(cāng)庫(kù)克隆時(shí)申尤,實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來(lái)了,并且衙耕,遠(yuǎn)程倉(cāng)庫(kù)的默認(rèn)名稱是origin昧穿。
要查看遠(yuǎn)程庫(kù)的信息,用
git remote
顯示更詳細(xì)的信息, 用
git remote -v
-
推送分支: 就是把該分支上的所有本地提交推送到遠(yuǎn)程庫(kù)橙喘。推送時(shí)时鸵,要指定本地分支,這樣型凳,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上:
git push origin master git push origin dev
并不是一定要把本地分支往遠(yuǎn)程推送,master分支是主分支驶社,因此要時(shí)刻與遠(yuǎn)程同步, 其他視情況而定.
git pull
抓取遠(yuǎn)程的新提交.在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支别威,使用
git checkout -b branch-name origin/branch-name
,本地和遠(yuǎn)程分支的名稱最好一致彭雾;建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用
git branch --set-upstream branch-name origin/branch-name
锁保;