前端小白一枚,最近開始使用git,因而花了2天看了廖雪峯的git教程(偏實踐,對於學習git的基礎操做頗有幫助哦),也在看《git版本控制管理》這本書(偏理論,內容完善,很不錯),針對所學內容建了git倉庫測試,且寫了很多git操做命令的筆記,作個分享,有錯誤的地方各位大大也給提出,好作修改~html
Git是一款免費、開源的、用Linux內核開發的分佈式版本控制系統。前端
git和svn有什麼區別呢?git
git採用分佈式版本庫管理,而svn採用集中式版本庫管理。github
集中式版本庫管理須要有一臺存放版本庫的服務器,開發人員在開發的時候分別從服務器拉取過來最新版本,而後建立/進入分支進行開發,開發完成以後將分支提交或者合併到主分支。瀏覽器
分佈式版本庫管理容許開發者們將版本庫搬到本身的電腦上,在開發過程當中,開發者們能夠根據不一樣的目的建立分支和修改代碼,開發完成後進行各項合併,這樣作提升了開發的敏捷性和速度,而且減小了公共服務器的壓力,且任意兩個開發者之間的衝突更容易獲得解決。bash
git安裝服務器
首先,你能夠在你的電腦上執行"git"命令,檢查是否已安裝git。若是已安裝,則會列出它的選項和最經常使用的子命令。若是未安裝,則打印提示未安裝或不是內部/外部命令。app
安裝包下載地址:git.download,按需選擇吧,想必憑各位多年的電腦開關機經驗,QQ、瀏覽器、遊戲等的安裝卸載經驗,這步驟應該不會出現什麼問題。ssh
git的配置分佈式
安裝完git,咱們執行"git"命令查看它的選項和最經常使用的子命令。
//這裏命令也就不一一列出了,你們本身執行看下便可(讓我假裝下注釋,謝謝~)
而後就是配置你的名稱及郵箱:
git config --global user.name "yeshou" git config --global user.email "xxx@qq.com"
咱們能夠經過根目錄下的.gitconfig文件查看配置信息,這裏加了--global,因此是全局配置,若其餘倉庫木有單獨配置,則使用的是全局的,若是其餘倉庫須要單獨配置,去掉--global重複以上操做便可,同理,可在對應倉庫文件夾下看.gitconfig文件的配置信息(友情提示,這是個隱藏文件)。
生成SSH-key
配置完了git的提交人信息,咱們在本地生成個ssh-key,用來驗證提交者身份。
ssh-keygen -t rsa -C "xxx@qq.com"
而後在.ssh文件夾下找到id_rsa.pub文件,裏面內容複製到github的"setting"下的"SSH and GPG keys"的添加過程的輸入框裏,用以生成ssh-key。
在github上實踐
在github上建立一個遠程倉庫,登陸github網站,經過右上角"New respository"新建一個好比名爲"git-test"的項目倉庫。咱們打開項目倉庫的首頁,複製倉庫地址(既然配置了SSH,那就選擇SSH咯;固然,也能夠經過HTTP的來clone),能夠經過git clone 命令將遠程倉庫拉到本地。
git clone "git@github.com:your-github-name/git-test.git"
這樣就把項目拉取到當前文件夾下了,so easy~ 以後,咱們能夠操做本地文件夾進行增刪改查等操做,下面列出一些操做。
在操做以前,須要瞭解工做區和暫存區和版本庫的概念。
工做區:電腦中的文件夾內容
版本庫:工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。
暫存區:該內容存在於隱藏的.git目錄下,能夠簡單理解爲,須要提交的文件修改統統放到暫存區,而後一次性提交暫存區的全部修改。
詳情點擊此連接,有圖有真相啊~
git基礎操做命令
文件操做
將文件添加到版本庫
git add TEST.md //添加了一個TEST.md文件
將版本庫中文件重命名
git mv TEST.md LALALA.md //更名:TEST => LALALA
將文件從版本庫刪除
git rm LALALA.md // 刪除LALAL.md 文件
查看操做記錄
git log //若是以爲信息太多,能夠加參數"--pretty=oneline",這樣就可以輸出簡短信息。
列出master分支的歷史操做
git log master
列出某個文件的歷史操做
git log LALALA.md
而後在上一句操做中你會發現,追溯LALALA文件的操做歷史的時候看不到它更名以前的歷史,怎麼辦呢?
git log --follow LALALA.md //加上"--follow"參數會讓git在日誌中內容相關聯的整個歷史記錄
查看你的每一次操做命令
git reflog //列出每次你的操做命令,如:log、add、rm等
版本回退
git reset --hard HEAD^ //HEAD表示當前版本,加^表示上一個,加^^表示上上個... git reset --hard commit-id //咱們能夠經過git log拿到指定版本的提交id,而且返回到指定版本
查看工做區狀態
git status //可看出是否對文件進行修改
將修改提交到暫存區
git add fileName //添加修改的文件 git commit -m "message" //提交修改的文件,而且輸入修改信息
將暫存區的文件提交到遠程倉庫
git push (master) //不填則默認提交到當前分支,也可提交到指定分支
查看工做區與版本庫中最新版本之間的不一樣
git diff HEAD fileName //當文件在工做區修改後還未提交到版本庫
丟棄在工做區所作的修改
git checkout -- index.html //丟棄對index.html的修改
將遠程倉庫的修改拉取到本地
git fetch (master) //不填則默認拉取當前分支的最新修改,也可指定須要拉取的分支,fetch以後並不會合併修改 git pull (master) //不填則默認拉取當前分支的最新修改,也可指定須要拉取的分支,pull以後合併修改
分支操做
分支是在軟件項目中啓動一條單獨的開發線的基本方法,使得開發可以在多個方向上同時進行,分支通常會被調解並與其餘分支合併,用來合併不一樣的開發。通俗來說,至關於將一個大任務分解成多個小任務,分給多人同時進行處理,完了再組合到一塊兒,因而完成了個大任務。
建立分支
git branch dev //建立了一個dev分支,然而並沒切換到這個分支上
切換分支
git checkout dev //切換到dev分支上
建立而且切換分支
git checkout -b dev //建立了一個dev分支,而且切換到這個分支上
打了一遍上面的命令,而後屁顛屁顛跑去github刷新看分支,然而並無,少年莫慌,那是由於你還沒將分支提交到遠程倉庫~
將分支放到遠程倉庫
git push origin dev //好了,將dev分支提交到遠程倉庫了,而後又跑去刷新了github,此次終於看到分支的存在了
查看分支
git branch //帶星號的是當前分支,加參數"-r"查看遠程分鐘,"-a"查看全部分支
合併分支
注:首先明確目前在哪一個分支上,不能夠在當前分支上將此分支合併到其餘分支。
git merge dev //假如我如今在master分支上,而後合併了dev分支
一般合併分支的時候,git使用Fast-forward模式,咱們能夠在合併的時候使用參數"--no-ff"禁用該模式
git merge --no-ff -m "" dev //這樣的合併會建立一個新的commit
這時分支合併了,而後你會發現分支依然存在,怎麼辦呢?
刪除分支
git branch -d dev //刪除dev分支 git branch -D dev //強制刪除dev分支
這時候問題又來了,去github刷新看dev分支仍是存在的...
刪除遠程分支
git push origin --delete dev //刪除了遠程倉庫中的dev分支
刪除不存在對應本地分支的遠程分支
git remote prune origin
刪除不存在對應遠程分支的本地分支
git fetch -p
查看分支合併流程圖
git log --graph //明確的看到什麼時候建立/修改/合併分支
標籤操做
標籤能夠簡單的看作是一個標識點或者參考點。它是個靜態的名字,不隨時間的推移而改變。而分支是動態的,且隨着你每次的提交而移動。他們之間看起來類似,但咱們須要分清楚他們,且勿將其混淆。
建立一個標籤
git tag v0.1 // 建立一個標籤,名爲v0.1=> version 0.1
將標籤推到遠程倉庫
git push origin v0.1
一次性推送全部標籤
git push origin --tags
刪除本地標籤
git tag -d v0.1 //刪除名爲v0.1的標籤
刪除遠程倉庫的標籤
git push origin :refs/tags/v0.1
進度暫存操做(相似遊戲的存檔)
git提供一個"存檔"功能。好比,當你正在改一個功能的時候,臨時須要修改另外一個功能,並且比較重要,而又不能直接checkout丟棄當前的修改,這時候git提供的"存檔"就好用了。能夠將以前的修改暫時存起來,把工做區恢復到乾淨的環境供你修改另外一個功能。
建立一個"存檔"
git stash //暫時存儲了當前的操做進度
查看"存檔"的列表
git stash list
查看"存檔"內容
git stash show stash@{index} //查看相對索引的存檔內容,不加stash@{index}則默認是最近的"存檔"
恢復"存檔"
git stash apply stash stash@{index} //恢復相對索引的存檔內容,不加stash@{index}則默認是最近的"存檔"
恢復以後會發現,這個"存檔"還在存檔列表中,簡直跟玩rpg遊戲同樣麼~
刪除"存檔"
git stash drop stash@{index} //刪除相對索引的存檔內容,不加stash@{index}則默認是最近的"存檔"
清除全部"存檔"
git stash clear //畢竟一個個drop太累
給命令配置別名
若是你嫌一些命令麻煩或者太長或者很差記等等...
git config --global alias.cmt commit
而後你就可使用"git cmt"代替"git commit"了。
刪除別名
打開.gitconfig文件,找到[alias]的內容,刪除對應別名的行內容便可
.gitignore文件
能夠在文件夾下添加.gitignore文件,告訴git在執行命令的時候忽略一些內容。
具體操做:打開.gitignore,在後面一行添加須要忽略的內容。
文件夾: 如"src/" //忽略src文件夾下的全部文件
文件:如"*.jpg" //忽略以jpg爲後綴的文件
...
向git求助
git help //列出參數列表及命令列表 git help command //打開該命令的html文檔 git command --help //打開該命令的html文檔
暫時就這麼多吧~還在繼續學習更多git用法,以後整理出來的筆記若是能夠的話也會分享哦~