全部的版本控制系統,其實只能跟蹤文本文件的改動,好比TXT文件,網頁,全部的程序代碼等等,Git也不例外。版本控制系統能夠告訴你每次的改動,好比在第5行加了一個單詞「Linux」,在第8行刪了一個單詞「Windows」。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但無法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是隻知道圖片從100KB改爲了120KB,但到底改了啥,版本控制系統不知道,也無法知道。php
工做區就是電腦中實際能看到的文件夾,好比labshare
文件夾
圖片中顯示有個.git
隱藏目錄,它是Git的版本庫。git
Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支
master
,以及指向master
的一個指針叫HEAD
ssh
每次進行git add
操做時,將文件放入stage
暫存,git commit
後將文件放入當前分支url
1.初始化一個Git倉庫,使用git init
命令。
2.添加文件到Git倉庫,分兩步:spa
git add
,注意,可反覆屢次使用,添加多個文件;git commit -m "註釋"
。git status
命令可讓咱們時刻掌握倉庫當前的狀態。命令行
git diff
進行查看相比較上個狀態進行了哪些更改,如:版本控制
git diff hello.php
git log
進行查看git日誌,若是一次顯示太多,可選參數爲--pretty=oneline
如使用git log
命令後,有多塊記錄,每塊有四行指針
commint:123jkh123jkh12kjne12j3 //一串數字 author:XXX Date:XXXX-XX-XX XXXX //這行爲git commit -m "XXXX"
--graph顯示分支合併圖
--abbrev-commit
日誌
git rm
進行文件刪除,而後git commit -m "XXX"
,若是rm
誤刪工做區文件,還沒進行commit
可以使用git checkou --filename
從版本庫中恢復出來code
git clone url
進行從遠程庫克隆,可選擇https
和ssh
,ssh
速度優於https
如去切換至其餘分區或進行其餘工做,git stash
用於將手頭工做暫時保存,git stash pop
回到工做現場
HEAD
表示當前版本,上一個版本是HEAD^,多個版本以前可以使用HEAD^n
(n爲數字)
具體命令爲:git reset --hard HEAD^
,去上一個版本
若是後悔了想回將來,前提命令行窗口未關閉,可git log
查看commit後的一串,寫前幾位就行能進行惟一表示,如
git reset --hard absd11
更糟糕的狀況是你進行版本回退後次日又想重返將來,git log
查詢不到須要版本的coomit了,這時請使用git reflog
,樣子多是這樣的
as12312 HEAD@{0}: commit : XXXXX asdvcad HEAD@{1}: commit : XXXXX a1deff1 HEAD@{2}: commit : XXXXX
最開始的數字就能夠進行 git reset --hard as12312
,進行穿梭
1.當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout --filename
2.當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD filename
,暫存區的修改回退到工做區,工做區的丟棄可按照1
3.若是提交不適內容至版本庫,請進行版本回退
git checkout -b name
,建立並切換到指定分區,至關於結合命令
git branch name //建立分支 git checkout name //切換分支
使用git branch
查看當前分區,當前分區前有*
標識git merge name
用於合併指定分支到當前分支git branch -d name
刪除分支
分支合併時產生衝突應解決衝突再提交去工做區文件查看,標識爲<<<<<<<
,=======
,>>>>>>>
標記出不一樣分支的內容將衝突修復後再提交
git通常使用fast forward
模式進行分支合併,很差的地方是刪除分支後悔丟掉分支信息,因此模式可調爲--no-ff
禁用fast forward,在合併時會生成一個新的commit,所以可加描述進去
git merge --no-ff -m "no ff" dev //將dev分支合併至當前分支
在實際開發中,咱們應該按照幾個基本原則進行分支管理:
首先,master
分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev
分支合併到master
上,在master
分支發佈1.0版本;
你和你的小夥伴們每一個人都在dev
分支上幹活,每一個人都有本身的分支,時不時地往dev
分支上合併就能夠了。
因此,團隊合做的分支看起來就像這樣:master
是主分支,需時刻與遠程同步dev
全部團隊開發工做在上面,時刻與遠程同步
抓取分支
1.git clone url
,克隆遠程庫,這時只能看到master分支
2.建立遠程的dev
到本地
git checkout -b dev origin/dev
基本流程
1.首先,能夠試圖用git push origin branch-name推送本身的修改; 2.若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併; 3.若是合併有衝突,則解決衝突,並在本地提交; 4。沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功! 5.若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接 關係沒有建立,用命令git branch --set-upstream branch- name-origin/branch-name。
這裏不少流程和思想參考廖雪峯的Git教程,不勝感激前人無私分享。
地址:Git教程--廖雪峯