天天看點

代碼管理的git--非常常用指令

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

代碼管理的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的方式拉取下來的項目隻有有限個記錄,而且不包含其他分支資訊。

對于初始項目如下圖

代碼管理的git--非常常用指令

使用depth=1克隆項目之後

代碼管理的git--非常常用指令

可以發現,這樣clone之後的曆史記錄隻有一條,而且沒有其他分支。那麼當depth加大的時候呢?除了clone,fetch,pull都可以使用depth參數。

這裡把depth設定成5,擷取到分支dev建立之前的記錄,看dev是否會出來。

代碼管理的git--非常常用指令

即使depth等于5,也依然沒有其他分支(branch -a 都不會顯示)。

代碼管理的git--非常常用指令

也可以通過

git clone --depth 1 --no-single-branch [email protected]/sample.git

直接擷取多個分支

shallow 拉取如何擷取其他分支呢?

1、指定遠端分支拉取

git remote set-branches 'dev'
git fetch --depth=1 origin dev

           

複制

代碼管理的git--非常常用指令

上面這樣其實是設定了遠端分支名稱。但是這這樣會破壞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

錯誤

代碼管理的git--非常常用指令

兩種方案可以配合使用。先使用depth一點一點的把項目曆史記錄拉取下來。待剩餘曆史記錄不多的時候再使用

git fetch --unshallow

拉取

送出代碼

## 添加變更檔案,
## --all,所有的;
## 使用-p參數手動添加變更内容;
## 或指定檔案添加單個檔案

git add --all

## 添加commit說明
git commit -m 'commit message'

## 更新遠端代碼
git pull 

## 将更新内容推送到伺服器
## 這樣其他協作者就能看到了
git push

           

複制

git add -p

會以區塊顯示檔案變更,開發者自己決定是否把變更内容添加到本次送出中。

代碼管理的git--非常常用指令

如果覺得生成的區塊粒度太大了,想要更細一些的,可以在git add -p之後的選項中輸入

s

會将該區塊更細的劃分,進而達到添加行變更的目的。

代碼管理的git--非常常用指令

更新代碼

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
           

複制

基本上日常開發常用的是這些,為避免篇幅太長,各種需求變更的場景放在下一篇。