<!--more-->html
分佈式版本控制系統,它是由Linux(全球比較大的服務器系統)創始人花兩週使用C語言編寫的,(在GIT命令窗口中通常是執行Linux命令)node
什麼是版本控制系統?git
可以把以前操做的具體信息記錄下來,方便往後的更改。github
- 備份文件
- 記錄歷史
- 回到過去
- 多端共享
- 團隊協做
經常使用的版本控制系統web
- git:分佈式版本控制系統
- svn:集中式版本控制系統
面試題:分佈式和集中式的區別?面試
[集中式]:npm
- 想要作歷史記錄的查看或者備份,必須鏈接到中央服務器才能夠(須要聯網)
- 處理速度沒有git快
[分佈式]:bash
- 每一個開發者本地都是一個單獨的倉庫,在本身的倉庫中就能夠完成歷史版本記錄和查看(不須要聯網)
- git處理的速度更快(git是按照數據存儲的)
ls:查看當前目錄下的文件(或文件夾)服務器
cd: 目錄切換分佈式
touch 建立一個空文件
touch .gitignore
vi 向指定文件中插入內容 例如:vi.txt
rm 刪除文件
安裝完成git後,咱們應該先把基礎信息配置一下(本身須要配置一次便可)
$ git config -l 查看當前本機的配置清單 $ git config --global user.name xxx $ git config --global user.email xxx (xxx寫github/coding等平臺的帳號和郵箱)
Git是分佈式版本控制系統,每一臺客戶端都是一個獨立的git倉庫(有git工做的全套機制)
一個git倉庫分爲三個區域;
- 工做區:平時寫代碼的地方
- 暫存區:寫好的一些代碼暫時存儲的地方
- 歷史區:生成一個個版本記錄得地方
在指定目錄中,打開git bash命令行,執行git init
,至關於以當前目錄做爲基礎,建立了一個本地git倉庫建立完成後,會在項目的根目錄中展現 .git 這個隱藏文件:有這個.git文件的才叫作git倉庫,沒有則不能被稱爲git倉庫(由於暫存區和歷史區都是存在 .git 文件夾中的)
$ git add xxx 把某個文件提交到暫存區 $ git add . 把全部修改的文件(修改和新增的包含,刪除的不包含)提交到暫存區 $ git add -u 把全部修改的文件(包含修改和刪除的,不包含新增的) $ git add -A 是點和u的集合體,(全部修改,新增,刪除的信息都會提交到暫存區),可是真實效果中二者都差很少,用哪一個均可以 $ git status 查看當前文件的狀態 紅色:在工做區中,尚未提交到暫存區 綠色:在暫存區中,尚未提交到歷史區
- 若是在提交的時候,有些內容不想提交,咱們能夠增長git提交的忽略文件:
.gitignore
(沒有文件名只有後綴名).gitignore 中的信息:
.idea // 使用WS打開項目或者編輯項目,自動會生成的文件node_modules // 使用npm安裝模塊的時候,當前安裝在項目中的第三方模塊都在這個文件夾中(之因此忽略是由於文件太大了)
.DS_Store (mac本中的文件)等等
$ git commit $ git commit -m'註釋內容' $ git commit -a -m'註釋內容' 把提交到暫存區和提交到歷史區合併到一塊兒完成。可是隻適合已經提交過一次的文件,被修改後能夠快速提交。可是對於新增的文件,一次都沒有提交過的,是不容許這樣操做的。
【root-commit】根提交:
不論是從工做區提交到暫存區,仍是從暫存區提交到歷史區,每個區域當前的內容是已知保存下來的不會消失。
$ git log 或 $ git reflog
都是查看歷史提交記錄的(也至關於查看歷史版本號),在沒有歷史版本回滾的時候,咱們用哪一個均可以。若是有歷史版本回滾,
git log
只能查看當前回退版本之前的版本
$ git rm --cached . -r
能夠把.
替換爲具體的文件名,這條命令的意思是:從暫存區把全部內容(或者是你指定的具體文件)都撤回到工做區(無論暫存區中的內容是否已經提交到歷史版本上了,也不論是你第幾回放到暫存區的,通通撤回到工做區)
這種方式太暴力,咱們用的不多,不推薦使用
$ git checkout .
這條命令的意思是:
把暫存區內容撤回工做去(覆蓋現有工做區中的內容沒法找回)。
也能夠理解爲:用上一個暫存區存儲的內容覆蓋現有工做區的內容,工做區內容變爲和上一個暫存區同樣的內容,暫存區內容還在。
存在問題:只能限制當前代碼尚未提交的狀況,當前代碼沒提交回滾的是上一次提交到暫存區的內容(和工做區內容不同);若是當前此次也提交了,暫存區和工做區同樣,回滾回來也是同樣的,這個方式就解決不了了。
解決問題:
- 輸入命令
$ git reset HEAD .
: 在暫存區中,回滾到上一次暫存區中記錄的內容(暫存區先回滾一次)- 輸入命令
$ git checkout .
: 把最新暫存區的內容回滾到工做區,替換工做區中的內容
$ git diff
工做區 VS 暫存區 :git diff
工做區 VS 歷史區 :
git diff master
暫存區 VS 歷史區 :
git diff --cached
查看不一樣區域之間代碼的不一樣,咱們通常都是基於可視化的頁面來查看不同的
最重要的代碼回滾技巧:
$ git reset --hard 版本號
git log
能夠查看版本號回滾的時候指定的版本號不必定很是全,有七八位便可
當咱們回滾到某一個歷史版本以後,暫存區和工做區的內容都將被這個版本內容所代替
$ history > xxx.txt //(把歷史操做步驟輸出)
- 前面講的都是單獨開發,在本身本地創建git倉庫的一系列操做流程,在團隊寫做開發下,流程仍是有所區別的
- 通常是由團隊技術LEADER或者指派人完成的,倉庫中默認是有一些初始化文件的
- 中央倉庫多是在:gitHub,Coding,本身公司的git倉庫服務平臺,本身公司的服務器等...
- 基於gitHub建立遠程倉庫,建立完成後會生成一個遠程地址,例如:
https//github.com/username/Repository name.git
做爲LEADER,還須要把項目中一些基礎的信息提交到遠程倉庫上:
- 在本身本地建立一個倉庫,把一些基礎內容都放在倉庫中
- 把新增長的內容提交到本地倉庫歷史區中
- 讓本地倉庫和遠程倉庫保持關聯
- 把本地倉庫歷史區中的信息同步(推送)到遠程倉庫上
- 讓本地倉庫和遠程倉庫保持關聯:
$ git remote add 名字(通常都叫作origin) 遠程倉庫地址 $ git remote rm 名字 // 移除關聯 $ git remote -v // 查看當前倉庫和哪些遠程倉庫保持關聯
讓本地歷史區信息和遠程倉庫信息保持同步:
第一種方法:
$ git push origin master // 把本地信息推送到遠程倉庫上 $ git pull origin master // 把遠程的拉取到本地倉庫 (origin 是本地和遠程倉庫關聯的那個名字,master 是遠程倉庫的主分支)第二種方法:(推薦使用)
咱們建立完成後遠程倉庫後,能夠直接經過git clone 倉庫地址 倉庫別名(能夠不寫)
的方式把遠程倉庫克隆到本地:至關於在本地建立了一個倉庫
也讓本地這個倉庫和遠程倉庫保持了鏈接(名字:origin)
也把遠程倉庫現有的內容克隆到了本地
做爲開發者天天來的第一件事情或者提交代碼以前,都要先pull一下
- 【若是遠程倉庫和本地倉庫不是同一個文件同一行代碼衝突】
git 會自動依賴於 Fast-forward 模式進行合併自動合併後,咱們從新提交便可
git add/commit/push
【同一個文件的同一行代碼衝突】
找到衝突的文件,留下本身想要的代碼無論以前是否commit過,都要從新的commit,而後push便可
- 天天第一件事情,就是建立一個dev分支並切換到這個分支上
- 正常的開發代碼,把天天開發的任務都先提交到本身的分支上
提交到遠程倉庫上:
把本地本身分支DEV中的內容,合併到本地本身的MASTER 分支下把本身本地建立的分支刪除(能夠不刪除,可是有的公司不但願遠程中出現分支,或者避免開發人員的分支衝突,提交以前都要把本身建立的分支刪除掉)
- 和第一種只使用MASTER分支同樣了,把本地最新合併的MASTER分支代碼,提交到遠程倉庫的MADTER下,(衝突合併便可)
操做分支的基礎命令:
$ git branch //查看現有的分支 $ git branch xxx //建立一個新的分支(當切換到某個分支上的時候,會把當前MASTER分支中的新信息同步到這個分支上) $ git checkout xxx //切換到某個分支上 $ git checkout -b xxx //建立一個新的分支而且切換到這個分支上 $ git branch -D xxx //刪除某個分支(必定要切換到其餘分支上才能夠刪除當前分支) $ git merge xxx //合併分支內容 $ git log --graph / --oneline //再有分支的狀況下,能夠更清楚地查看分支的提交和合並內容(瞭解就好)
首先fork別人的倉庫
- 把別人的倉庫克隆一份如出一轍的,放到本身的帳號下,變爲本身的倉庫(咱們平時能夠修改本身倉庫的源碼)
- fork的倉庫和別人的原始的倉庫會默認創建一些關係,咱們能夠把本身倉庫中和別人不同的地方,提交給別人,用(pull-request)
把本身fork的倉庫,克隆到本地
- 之後本身有一些新的代碼心得,能夠本身嘗試去修改,而後同步到本身fork的倉庫中
- 在github中點擊 new pull request
GitHub只提供了web站點的發佈,後臺項目沒有提供必要的環境
- 把整個倉庫做爲一個項目發佈(這種模式不經常使用)
master是項目代碼,gh-pages分支下存儲的是項目預覽頁面的代碼
其餘人克隆研究的是master分支下的代碼
看介紹頁面,看的是gh-pages分支下的代碼
- 建立一個倉庫
- 把倉庫克隆到本地
- 把源碼傳到master分支上
- 在本地倉庫中建立gh-pages分支
- 把介紹頁面放在gh-pages分支下
- 把介紹頁面的內容上傳到github的gh-pages分之下
訪問頁面:http://用戶名.github.io/倉庫... (若是頁面是index能夠忽略不寫)
第一步,在github上新建一個倉庫,把遠程倉庫經過
git clone xxx
克隆到本地第二步,把本身寫好的做品放在本地倉庫中
第三步,經過
git add -A
,git commit -m
,git push origin master
三步操做,把本身的項目同步到遠程倉庫github中
- 之後修改後,從新執行這三步推送便可
在投簡歷的時候,把網址
https://用戶名.github.io/倉庫名
寫到簡歷上就能夠訪問到頁面效果。若是以爲地址太長很差記,也能夠經過草料二維碼 ,來製做本身喜歡的二維碼