1.當你已經(jīng)建立了本地的Git倉庫以后,又在GitHub上建立了一個Git倉庫,并且讓這兩個倉庫遠程同步
關聯(lián)一個遠程庫,使用命令:
```?
git remote add origin git @server-name:path/repo-name.git;
```
關聯(lián)以后,第一次將內(nèi)容推送到master分支上,使用命令:
```?
git push -u origin master
```
####? 2.從遠程庫克隆
注:之前都是講的先建立本地的庫,再關聯(lián)遠程庫;但是如果重新開始一個項目,最好是先創(chuàng)建遠程庫,再克隆到本地
現(xiàn)在假設我們已經(jīng)建立了遠程庫,那我們按開發(fā)流程,進行如下操作:
##### 1.git clone克隆一個本地庫
```?
git clone git@...你的遠程倉庫項目地址
```
那么多人協(xié)同開發(fā),就可以每個人克隆一份到本地了,git支持多種協(xié)議,包扣https和ssh,但是ssh支持的原生git協(xié)議速度最快.
#### 3.從遠程庫克隆下來以后,進入到本地的文件夾下面,如果你什么也沒有做,然后你想查看當前的分支,你執(zhí)行git branch,會提示你不是Git存儲庫:
那么你要執(zhí)行git init建立本地的代碼庫,然后就可以看見有master分支了,
當只有master分支時,master分支是一條線,git用master指向最新提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點.
當創(chuàng)建新的分支,如dev時,git新建一個指針dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
用帶參數(shù)的git log 可以查看當前分支的合并情況
git log --graph --pretty=oneline --abbrev-commit
查看分支合并圖
git log --graph
分支管理策略
master分支應該是非常穩(wěn)定的,用來發(fā)布新版本,平時都在dev分支上干活
dev分支是不穩(wěn)定的,到版本發(fā)布的時候就把dev合并到master上面,在master上面發(fā)布新版本,
然后每個人都有自己的分支,平常測試什么的只需要將自己分支上的東西合并到dev分支上面就可以了
bug分支
如果你正在dev分支上面進行某項工作,但是現(xiàn)在發(fā)現(xiàn)一個緊急bug,要先修復bug,怎么辦?
git可以使用stash功能將當前工作現(xiàn)場儲藏起來,等以后恢復現(xiàn)場后繼續(xù)工作
```?
git stash
git status
```
如果現(xiàn)實工作區(qū)是干凈的,就可以放心去創(chuàng)建分支修改bug了,比如要在master上面修復bug
```
git checkout master
git checkout -b bug-01
//然后修復bug,修復完以后再提交,然后切換到master分支,并刪除bug分支bug-01
git add .
git commit -m "update"
git checkout master
git branch -d bug-01
```
現(xiàn)在我們再切換回dev分支上繼續(xù)干活
```
git checkout dev
git status
//回看見說分支是干凈的,那么我的之前的工作現(xiàn)場去哪了,我們可以用git stash list來查看
git stash list
//那么我要怎么恢復現(xiàn)場,有兩種方式
//1.git stash apply 但是恢復以后stash內(nèi)容并不會被刪除,需要使用git stash drop來刪除
//2.git stash pop恢復的同時把stash內(nèi)容也刪除了,再查看git stash list
//3.git stash apply stash@{0}
```
feature分支
在開發(fā)中總是會有新功能添加進來,但是不想讓實驗性的代碼把主分支弄亂了,所以新添功能的時候最好新建一個分支,同bug分支一樣,修改以后再合并,然后刪除.
但是如果現(xiàn)在feature分支還沒有被合并,就被要求就地銷毀,功能取消,怎么辦?
強行刪除:
git branch -D <name>
在本地創(chuàng)建分支以后,關聯(lián)到遠程就相當于在遠程創(chuàng)建一個同樣的分支
```
git checkout develop
git branch
git checkout -b feature_xy
git add .
git commit -m "..."
git push origin feature_xy:feature_xy? ? //將本地新建分支關聯(lián)到遠程庫
git branch -a? ? //查看遠程庫分支
git push origin --delete feature_xy? ? ? //刪除遠程分支feature_xy
git branch
git checkout develop
git branch -d feature_xy? ? ?//刪除本地分支
```
多人協(xié)作
當你從遠程倉庫克隆的 時候,其實git已經(jīng)自動將本地的master分支和遠程的master分支對應起來了,并且遠程倉庫默認名稱是origin,要查看遠程倉庫信息:git remote?
查看遠程倉庫:
git remote
git remote -v
推送分支,將本地分支上的所有代碼提交到遠程庫
git push origin master
但是并不是一定要把本地分支往遠程推送,master分支是主分支,因此要時刻與遠程同步;dev分支是開發(fā)分支,大家都在上面工作,所有也要與遠程同步,但是bug分支修復了就刪掉好了,feature分支看你們項目需要
遠程clone下來的只有master分支,但是要在dev分支上面開發(fā),就需要創(chuàng)建遠程origin的dev分支到本地:
git checkout -b dev origin/dev
如果只是在本地創(chuàng)建了dev分支并沒有與遠程的origin/dev分支鏈接提示"no tracking information",那么怎么鏈接呢?
git branch --set-upstream dev origin/dev
然后在pull的時候就可以pull下來了