這裡不說很多git是什麼之類的,隻說工作中會使用到的場景。

建立新項目
伺服器端建立項目
服務端使用 git init --bare sample.git
用戶端就可以通過git clone [email protected]:sample.git 克隆倉庫
用戶端建立項目
項目的建立也可以是在用戶端建立(前提是目前使用者有建立權限)
假設需要将本地sample檔案夾建立為項目倉庫,進入sample檔案夾,執行
## 初始化
git init
## 添加遠端位址
git remote add origin [email protected]:sample.git
## 添加檔案
git add README.md
## 添加第一個commit
git commit -m 'init'
## push到遠端
#第一次push,使用push -u origin master
git push -u origin master
複制
項目拉取
普通拉取
一般項目拉取使用git clone [email protected]:sample.git
shallow 拉取
如果項目比較大拉取過程可能出現
Out of memory, malloc failed
這個時候就需要一點一點的拉取項目了。
git clone depth=1 [email protected]:sample.git
複制
使用depth=1限制記錄數目。可以大一點,但是不能太大,否則還是會出現上述錯誤。
使用depth的方式拉取下來的項目隻有有限個記錄,而且不包含其他分支資訊。
對于初始項目如下圖
使用depth=1克隆項目之後
可以發現,這樣clone之後的曆史記錄隻有一條,而且沒有其他分支。那麼當depth加大的時候呢?除了clone,fetch,pull都可以使用depth參數。
這裡把depth設定成5,擷取到分支dev建立之前的記錄,看dev是否會出來。
即使depth等于5,也依然沒有其他分支(branch -a 都不會顯示)。
也可以通過
git clone --depth 1 --no-single-branch [email protected]/sample.git
直接擷取多個分支
shallow 拉取如何擷取其他分支呢?
1、指定遠端分支拉取
git remote set-branches 'dev'
git fetch --depth=1 origin dev
複制
上面這樣其實是設定了遠端分支名稱。但是這這樣會破壞master 和origin/master的關聯。
使用
branch -vv
可以看到本地分支和遠端分支的關聯關系。
如果本地分支沒有和遠端分支關聯,可以使
git branch --set-upstream-to=origin/dev
關聯遠端分支。如果提示
fatal: Cannot setup tracking information; starting point 'origin/dev' is not a branch.
複制
則說明使用的是
git remote set-branches 'dev'
覆寫了遠端分支資訊。
可以使用
git remote set-branches --add origin dev
重新添加遠端分支資訊
是以擷取遠端分支應該使用的方式是
git remote set-branches --add origin dev
git fetch --depth=1 origin dev
複制
2、使用git fetch --unshallow ,擷取所有沒有檢下來的内容。隻有在剩餘内容比較少的時候才能使用,否則還會出現
Out of memory, malloc failed
錯誤
兩種方案可以配合使用。先使用depth一點一點的把項目曆史記錄拉取下來。待剩餘曆史記錄不多的時候再使用
git fetch --unshallow
拉取
送出代碼
## 添加變更檔案,
## --all,所有的;
## 使用-p參數手動添加變更内容;
## 或指定檔案添加單個檔案
git add --all
## 添加commit說明
git commit -m 'commit message'
## 更新遠端代碼
git pull
## 将更新内容推送到伺服器
## 這樣其他協作者就能看到了
git push
複制
git add -p
會以區塊顯示檔案變更,開發者自己決定是否把變更内容添加到本次送出中。
如果覺得生成的區塊粒度太大了,想要更細一些的,可以在git add -p之後的選項中輸入
s
會将該區塊更細的劃分,進而達到添加行變更的目的。
更新代碼
1、git pull,git pull 執行的内容包括拉取遠端的更新内容,同時将遠端更新内容與本地檔案進行合并。合并之後,本地工作區的内容也會立即發生變化。
2、git fetch,執行内容是拉取遠端更新内容。此時本地工作區間檔案還未改變。然後再自己執行git merge 手動合并更新
合并沖突
merge 或者pull之後,如果協作人員直接沒有沖突地方,會直接合并。如果有沖突,需要合并才能push。
沖突檔案,git會以以下的形式标記沖突雙方的修改。其中
<<<HEAD...===
内容是自己的修改,
==..>>>
内容是他人的修改。
<<<<<<< HEAD
qww
=======
555
>>>>>>> bb2f6e59
複制
當檔案的這些标記符被删除之後,指令行認為該檔案的沖突以及被處理了。
合并除了手動合并檔案之外,還可以在合并之前指定儲存哪一放的修改
以他人修改為準
git merge --strategy-option theirs
複制
以本地修改為準
git merge --strategy-option ours
複制
pull 的時候指定保留他人
git pull -X theirs
複制
基本上日常開發常用的是這些,為避免篇幅太長,各種需求變更的場景放在下一篇。