一,安裝githtml
下載地址 https://git-scm.com/download/wingit
二,如何使用gitgithub
(1)首先你要點進去https://github.com/這個網站,註冊一個github帳號。註冊好以後,要記住郵箱和密碼segmentfault
(2)打開以前的那個圖標就是這樣一個窗口,首先Git是分佈式版本控制系統,因此須要填寫用戶名和郵箱做爲一個標識,分別輸入這兩個命令,用戶名和郵箱須要換成本身的。安全
$ git config --global user.name "ycbou"dom
$ git config --global user.email "qiyincui77@163.com"ssh
(3) 打開以前的那個圖標就是這樣一個窗口。如今好比我在個人C:/wamp/www/aaa有一個項目,我要對它進行管理怎麼辦呢。直接在控制檯裏面輸入 cd c:/wamp/www/aaa 以後你就會在aaa這個目錄裏面了。那如何對它進行管理呢。直接在控制檯輸入git init編輯器
以後去查看aaa目裏會多了個.git 的文件夾,若是看不見也沒事,由於隱藏文件不可見分佈式
下面去新增一些文件,隨便輸入些內容,而後再git裏面輸入 git status。會發現添加的文件名是紅色的網站
紅色說明文件作了修改可是還沒保存到本地倉庫,咱們緊接着執行 git add . 再敲git status 發現剛纔的紅色文件名變成綠色的了,
咱們繼續敲 git commit -m "作修改"
敲完以後,使用git status 發現上面說工做區很乾淨。沒有文件要被提交
三,git原理
git 分爲工做區、暫存區、本地倉庫
工做區:你如今編輯器所處的那個工程裏面,
git status 是狀態查看,查看你工做區和暫存區有沒有文件被提交到本地倉庫,若是有工做區未向暫存區保存就顯示紅色
若是有暫存區沒有提交到本地倉庫就綠色
什麼是本地倉庫呢,就是一開始說的那個不可見的文件,你一執行git init就會有一個本地倉庫出來
若是從工做區把文件提交到暫存區呢?就是使用 git add . .表明全部,也能夠寫成 git add index.html 【index.html】
就是你作了變更的文件名 git add . 就是把文件從暫存區提交到本地倉庫
使用 git commit -m ‘作修改’ 引號裏面的內容是本身添加的一個備註,
在文件裏繼續添加一段話,再git status 查看當前狀態。發現有未向暫存區提交的保存 接着
git commit -m ‘第二次修改’ 將暫存區文件提交到本地倉庫,以後 再用git status 查看,
發現已經沒有文件提交;了
四,版本回退
到目前爲止,咱們向工做區提交了兩次修改,git 給咱們提供了一個git log能夠查看最近的提交歷史
若是以爲很亂可使用 git log --pretty=oneline
能夠看出咱們的兩次提交,前面那串黃色的就是咱們的版本號,如今要回到我原先的版本怎麼辦
可使用git reset --hard HEAD^ 這個命令回退到上一個版本
回到上上個版本,可使用命令 git reset --hard HEAD^^
咱們也能夠同給某個版本號回退到相應版本
git reset --hard 【版本號】
若是我如今又發現原來新版本的解決方法了,我又想回到新版本上去怎麼辦呢?
如今用git log 已經不能看到新版本的版本號了,只能採用新命令了 叫git reflog 來查看命令歷史
使用git reset --hard 【版本號】回到最新版本
如今接着往下進行,在index.html 接着添加一行
後來發現這句話不慎和是,這個時候能夠直接刪除,而後git add . 就行了。
可是也能夠經過git checkout -- index.html .此時前面那句話沒有了,這種狀況適用於咱們沒有git add到暫存區之氣an
若是咱們已經git add到暫存區了,怎麼撤銷修改呢 咱們可使用git reset HEAD index.html 先撤銷暫存區的修改
而後咱們能夠經過命令git diff查看暫存區和工做區有什麼不一樣,以後咱們能夠經過git checkout --index.html
發現已經修改好了,可是萬一咱們已經提交到倉庫裏,那就是上面說的版本回退了
5、刪除文件
新建一個test.txt git add tsxt.txt 已經 git commit -m "xxx"
如今若是要刪了,經過git status 發現工做區和本地庫已經不同了,
若是確實要刪除 就 git rm test.txt 以後再git commit -m 'remove'
若是刪除錯了,還原回來的話 用 git checkout -- test.txt
6、遠程倉庫
首先你要點進去https://github.com/這個網站,登陸你剛纔註冊的github帳號。
ssh-keygen -t rsa -C youremail@example.com
把這個郵箱替換成本身的
以後一路回車,若是一切順利的話你去你的C盤下去找你的user文件夾,有的叫用戶,你在裏面搜索一下有沒有一個.ssh的文件夾,把它打開以後,裏面有這幾個文件
以後接着打開那個https://github.com/網站,登陸進去。
點擊右邊這個綠色的圖表,點開下拉框以後裏面有個setting。
打開以後隨便寫入一個title,而後打開你剛纔找到的再C盤裏的那個id_rsa.pub.把裏面的內容複製到那個key裏面去,以後點擊添加便可。
以後回到一開始的這個頁面,
點擊中間的那個加號
選擇第一個,這就至關於你本身在遠程建了一個倉庫。
點擊以後,會出來這樣一個頁面。如今咱們在那個名字哪裏寫上aaa,直接點擊建立就好。
目前,在GitHub上的這個learngit倉庫仍是空的,GitHub告訴咱們,能夠從這個倉庫克隆出新的倉庫,也能夠把一個已有的本地倉庫與之關聯,而後,把本地倉庫的內容推送到GitHub倉庫。
如今,咱們根據GitHub的提示,在本地的aaa倉庫下運行命令:
$ git remote add origin git@github.com:BrouceLee/aaa.git
請千萬注意,把上面的BrouceLee替換成你本身的GitHub帳戶名,不然,你在本地關聯的就是個人遠程庫。
添加後,遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫。
接着執行命令git push -u origin master
執行完以後,咱們發現咱們的遠程庫和本地倉庫已經同步了。
從如今起,只要本地做了提交,就能夠經過命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,如今,你就擁有了真正的分佈式版本庫!
7、從遠程庫克隆
上次咱們講了先有本地庫,後有遠程庫的時候,如何關聯遠程庫。
如今,假設咱們從零開發,那麼最好的方式是先建立遠程庫,而後,從遠程庫克隆。
首先,登錄GitHub,建立一個新的倉庫,名字叫gitskills:
咱們勾選Initialize this repository with a README,這樣GitHub會自動爲咱們建立一個README.md文件。建立完畢後,能夠看到README.md文件:
如今,遠程庫已經準備好了,下一步是用命令git clone克隆一個本地庫:
咱們在想要建立項目的地方執行下面的命令
git clone git@github.com:BrouceLee/gitskills.git
如今去你你想要建工程的地方開始,就能夠發現大致上已經建好了。
分支在實際中有什麼用呢?假設你準備開發一個新功能,可是須要兩週才能完成,第一週你寫了50%的代碼,若是馬上提交,因爲代碼還沒寫完,不完整的代碼庫會致使別人不能幹活了。若是等代碼所有寫完再一次提交,又存在丟失天天進度的巨大風險。
如今有了分支,就不用怕了。你建立了一個屬於你本身的分支,別人看不到,還繼續在原來的分支上正常工做,而你在本身的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工做。
首先我來建立一個分支
執行命令git checkout -b dev 這樣就建立好了一個dev分支。
咱們來介紹一下,最開始的時候咱們的全部操做都是默認在一個叫作master的分支上操做的,包括提交到遠程庫,等等。關聯遠程庫的時候也是從遠程關聯master分支。當咱們用dev這個分支寫完一個項目以後,咱們要把這個分支所作的工做向master分支進行靠攏.
咱們如今能夠經過命令git branch來查看一下全部的分支。
git branch命令會列出全部分支,當前分支前面會標一個*號。
而後,咱們就能夠在dev分支上正常提交,好比對index.html作個修改,加上一行
而後咱們執行git add index.html以及 git commit –m 「use the dev first」
如今我dev的分支工做已經作完,如今我能夠切換回master分支。利用命令
git checkout master
切換回master分支以後,咱們發現index.html裏面咱們新加的那句話不在了。由於咱們剛纔是在dev分支上作的提交。如今咱們要把分支合到master上,就利用命令 git merge dev就能夠了,此時再去查看index.html發現咱們在dev裏面作的操做已經在master裏面了。如今咱們可使用命令git branch –d dev來刪除dev這個分支,以後再使用git branch來查看分支發現只有master一個分支了。由於建立、合併和刪除分支很是快,因此Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工做效果是同樣的,但過程更安全。
如今咱們考慮這樣一種狀況,咱們新建了一個分支feature1,利用feature1來進行把index.html裏面再加一行,首先切換到feature1這個分支,而後修改index.html,以後提交。
而後咱們切換回master分支,如今咱們在master裏的index.html裏面加一句話,以後進行提交。以後咱們按照剛纔的那種方式合併兩個分支。git merge feature1會發現有衝突出現
此時應該怎麼解決呢,此時必須手動解決衝突。
在實際開發中,咱們應該按照幾個基本原則進行分支管理:
首先,master分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;
你和你的小夥伴們每一個人都在dev分支上幹活,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了。
因此,團隊合做的分支看起來就像這樣:
最後推薦一個詳細的分工合做的網站,必定要看。http://www.javashuo.com/article/p-udnzcefn-ds.html
https://www.cnblogs.com/my-freedom/p/5701427.html