Git-版本控制,多人協作,分散式;
Github-開源專案,遠端倉庫;
我在github上建立了一個倉庫 https://github.com/abcd/2016ife;
現在我要把它下載到本地;
cd g:
cd github/test
git clone url 這裡url填寫倉庫的地址;如:https://github.com/abcd/2016ife.git
cd 2016ife
進入後如下:
git config --global user.name "xxxxxxx" //設定全域性的使用者名稱,回車後沒有提示就是設定成功了;
git config --global user.email "xxxxx@163.com" //設定郵箱
設定了這兩個,當我們提交程式碼的時候就會把這兩個記錄在版本庫裡,其他人就可以檢視到;
git config --global user.email //我們設定好了,也可以檢視的;回車後會列印出郵箱;
git config --list //檢視到所有的配置
master是主分支的預設名稱;建立一個分支,不影響穩定的主分支master,等分支做好了,再合併到主分支。
git的三個區:
工作區,暫存區,版本區(庫)
工作區-->暫存區-->版本區
暫存區:工作區要提交程式碼到版本區,需要經過暫存區;
先將改好的程式碼扔到暫存區,再把暫存區的扔到版本區;
暫存區的作用:作為過渡層,避免誤操作,保護工作區和版本區,分支處理;
git status //檢視當前工作區和暫存區的狀態
提示,nothing to commit……
我把xinshijie這個資料夾拷貝到了本地2016ife那個資料夾中,再在命令列輸入git status
表示有一個資料夾的內容現在沒有提交到暫存區和版本區,現在正在工作區;
git add xinshijie/ //新增到暫存區,git add 檔名 檔名可以是具體的檔案,也可以是資料夾的名字;git add . 全部新增到暫存區;
可以看到紅色的是 +1 ~0 -0 表示在工作區,有1個新增的檔案(資料夾),0個修改,和0個刪除的檔案;
綠色的是暫存區的;最後,看不見紅色了的,表示工作區已經乾淨了;
所以從工作區到暫存區,通過 git add這個命令來實現;
接下來,把暫存區檔案放入版本庫:
git commit //會直接彈出個記事本,要我們增加註釋; 而通過 git commit -m "change demo1" 這樣不會開啟記事本,而快速新增註釋; -m "註釋內容" ;
git commit -a -m "快速註釋" //這樣可以直接從工作區到版本區;-a 是簡寫的add,添加到暫存區;
再次使用 git status;看到已經提交有1個版本了;
git log //檢視提交歷史,按q退出;
git diff //比較工作區和暫存區的不同;
git diff --cached (git diff --staged) //比較暫存區和版本庫的不同;
git diff master //比較工作區和版本庫的不同;
撤銷操作:
git reset HEAD <file.name> //從暫存區撤銷回工作區,<file.name>輸入檔名
git checkout -- <file.name> //從工作區撤銷回版本區
git commit --amend //撤銷提交操作
注意:
這裡的邏輯是這樣的:我現在有兩個檔案在工作區;我首先新增了 drag.js到暫存區,然後提交到了版本區;這時我才發現還有個demo1.html沒有提交;其實我的想法是把這兩個檔案一次提交成功(涉及到提交的版本);解決方法:先把demo1.html新增到暫存區;然後使用 git commit -m "change3 drag.js and demo1.html" --amend 這樣就會撤銷掉上次提交,並且一起再提交;這樣就完成了撤銷,兩個檔案一起提交。
刪除
git rm <file.name> //刪除暫存區的內容;我們工作區假如刪了一個檔案,通過這個命令把暫存區的也刪掉;
git rm -f <file.name> //工作區和暫存區都有檔案的時候,強制刪除暫存區和工作區對應的檔案;
git rm --cached <file.name> //工作區和暫存區都有檔案時,只刪除暫存區的檔案,但保留工作區檔案;
恢復
通過git log可以看到cmmit的ID
git checkout commit_id <file.name> //這是對指定檔案進行恢復
git reset --hard commit_id //恢復到以前的版本
head 版本的指標 ,指標來控制版本
git reset --hard HEAD^ //回到前一個版本
git reflog //可以檢視所有分支的所有操作記錄(包括commit和reset的操作)
這樣用git reset --hard commit_id 可以恢復到以前的版本了;
下面將本地的開發,傳到github上;
我們要先登入github的客戶端;先可以看下是否登入了github賬號;
git remote //檢視遠端倉庫的名字,clone下,預設是origin 這個名字
git remote -v //檢視對應的遠端倉庫的地址
git push origin master //git push 遠端倉庫的名字 要同步的分支
這樣我們就提交到了遠端倉庫;
多人協作的時候,要新增新的協作人員;
這樣就會給使用者傳送一個請求,讓他來一起開發這個專案;
另外一個人收到許可權,仍然使用 git clone url 來獲取到本地;後面的操作命令都一樣;
多人協作開發
先拉取同步更新下,避免衝突;
多人協作解決衝突;
git pull與 git fetch的區別:
git fetch //不合併到分支中,先解決衝突,再手動地合併
git diff master origin/master //檢視差別
git merge origin/master //手動合併
git pull //直接合併到檔案中,不容易檢視到差別;
開源專案協作:先fork;再pull request
如何參與到沒有許可權的開源專案中呢?
fork 完全映象了一個版本,放到自己的賬號中…
修改完後,pull request,發到請求到作者那邊;
刪除倉庫
在settings中有 delete this repository;刪除要特別小心,不要誤刪了,刪除了是找不回來的。
git命令列