資料地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000html
http://www.cnblogs.com/wupeiqi/p/7295372.htmllinux
1、git的起源 ?git
git是Linux的創始人Linus爲了管理linux的版本而花了兩個星期寫的。以前用過一段時間BitKeeper這個軟件,github
後來鬧出矛盾了,一個道歉就能夠解決的事,做爲一個特立獨行的大牛,Linus索性本身搞。django
因此以後才能出現git和基於git的全球最大同性交友網站github。vim
大牛任性改變歷史,普通人任性只能改變本身。windows
2、git的做用?服務器
從起源能夠看出來,能夠用做版本管理,特別是多人協做的狀況下,在當今集團軍做戰的時代,git已經成爲必不可少的分佈式版本控制工具。app
3、 git的安裝?運維
沒有特殊的
windows 官網下載
Linux yum install git
4、git 命令大全
5、 git 原理
git 把當前文件夾在生成一個 .git 文件夾用做版本控制庫,這個文件夾之後可能會很大,由於全部代碼都存放在裏面。
分爲隔離的四個區,經過不一樣命令實現內容改變,換句話說你作的全部改變的代碼,都被做爲素材提交到庫中。
當咱們須要回到哪一個時刻,就把素材按照當時順序組織,因此在內存角度沒變多少,因此版本更替很快。
HEAD,一個指針,表明當前處理的版本
master,主分支,表明咱們主要的版本
dev,測試分支,表明咱們公司開發版本
xxx,本身名字,表明本身負責工做分支
平時master穩定運行,本身作完把本身分支向dev分支上merge,公司安排測試等測試dev版本,ok了運維部門安裝到服務器,也就是上線。
分支合併簡單狀況,修改-----保存
分支合併衝突狀況,解決衝突。先後衝突的文件中,衝突的內容二者都會顯示,須要人工手動選擇一個,修改完畢,再提交。
6、使用場景總結:
本地開始
$ pwd # 顯示當前目錄 $ git init # git初始化 $ git status # 查看當前git狀態 $ git add . # 添加當前目錄下全部文件到版本庫 $ git commit -m '第一次提交' # 提交到版本庫,並填寫版本說明,以便之後回滾。 $ ls # 查看目錄下文件 $ touch a.py # 建立新文件 $ git log # 查看歷史版本提交記錄(根據版本commit值能夠進行回滾) $ git reset --hard 版本號 # 工做區向歷史滾 $ git reflog # 查看回滾記錄 $ git reset --hard 0972f4b # 工做區向將來滾
$ git checkout -- file # 撤回工做區修改,讓這個文件回到最近一次或時的狀態。這兩個點至關於單機遊戲中的存檔點,執行就保存一次狀態
$ git reset HEAD file # 撤回提交到暫存區的修改,工做區未退回,
$ git rm file # 刪除文件,須要commit
$ git commit
$ git tag # 查看全部標籤
$ git show tagename # 查看便籤詳細
$ git tag -a tagname -m message commit_id # 給commit建立標籤,方便之後查看,默認是打在HEAD上
$ git tag -d tagname # 刪除本地便籤
$ git push origin tagname # 推送標籤到遠程庫,便籤不推不會到遠程庫
$ git push origin --tags # 推送所有標籤git addgit commit
新功能開發方案
$ git branch dev # 建立新分支,即:拷貝一份當前所在分支代碼到新分支 $ git checkout dev # 切換到dev分支 $ vim app01/views.py # 開發功能 $ git status # 查看狀態,即:在dev分支修改了app01/views.py文件 $ git add . # 將修改文件添加到版本庫的暫存區 $ git commit -m '新功能開發完畢' # 將暫存區的內容提交到當前所在分支,即:dev分支 $ git checkout master # 切換回master分支 $ git merge dev # 將dev分支內容合併到master分支
$ git branch -d dev # 新功能沒完成,老闆說不要了
$ git branch -D dev # 還沒提交就不要了,強制刪除
新功能開發中去修復bug之stash方案
$ vim app01/views.py # 開發直播功能,剛開發到一半 ,不想提交 $ git status $ git stash # 將開發到一半的直播功能,臨時存儲到「某個地方」 $ git status # 工做區回到當前版本未作任何操做前 $ vim pondo/settings.py # 緊急修復bug $ git add . # 添加到修改bug的代碼到暫存狀態 $ git commit -m '緊急修復bug' # 提交修復Bug的代碼到分支 $ git stash pop # 將開發到一半的直播功能從「某個地方」再次拿會工做區繼續開發 stash 命令 git stash 將當前工做區全部修改過的內容存儲到「某個地方」,將工做區還原到當前版本未修改過的狀態 git stash list 查看「某個地方」存儲的全部記錄 git stash clear 清空「某個地方」 git stash pop 將第一個記錄從「某個地方」從新拿到工做區(可能有衝突) git stash apply 編號, 將指定編號記錄從「某個地方」從新拿到工做區(可能有衝突) git stash drop 編號,刪除指定編號的記錄 例子 a. 原來內容: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲專區') b. 在a基礎上開發到一半直播功能: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲專區') def live(request): print('開發到一半') return HttpResponse('....') c. 執行git stash,回到當前版本未修改狀態a: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲專區') d. 修復Bug並提交: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲xxxxx專區') e. 繼續開發直播功能 git stash pop,此時會出現衝突: $ git stash pop 表示app01/views.py存在衝突須要解決,此時文件內容爲: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): <<<<<<< Updated upstream: # 修復Bug時更改的內容 return HttpResponse('非洲xxxx區') ======= # 修復Bug前正在開發新功能時的內容 return HttpResponse('非洲專區') def live(request): print('剛開發到一半') return HttpResponse('直播功能') >>>>>>> Stashed changes 須要自行解決衝突,而後繼續開發,如: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲xxxx區') def live(request): print('剛開發到一半') return HttpResponse('直播功能')
新功能開發中去修復bug之修補bug分支方案
$ git branch # 當前在master分支 $ git branch dev # 建立dev分支用於開發新功能 $ git checkout dev # 切換到dev分支 $ vim app01/views.py # 開發新功能到一半,須要緊急修復Bug $ git add . $ git commit -m '新功能開發一半' $ git checkout master # 切換回master分支 $ git branch bug # 建立修復bug分支 $ git checkout bug # 切換到bug分支 $ vim pondo/settings.py # 修改bug $ git add . # 提交bug $ git commit -m '緊急修復bug' # 提交bug $ git checkout master # 切換回master $ git merge bug # 將bug分支內容合併到master分支,表示bug修復完畢,能夠上線 $ git checkout dev # 切換到dev分支,繼續開發新功能 $ vim app01/views.py # 繼續開發其餘一半功能 $ git add . # 提交新功能 $ git commit -m '繼續開發完成' # 提交功能 $ git checkout master # 切換回master分支 $ git merge dev # 將dev分支合併到master分支 branch相關經常使用命令: git branch 分支名稱 建立分支 git checkout 分支名稱 切換分支 git branch -m 分支名稱 建立並切換到指定分支 git branch 查看全部分支 git branch -d 分支名稱 刪除分支 git merge 分支名稱 將指定分支合併到當前分支
在家第一次推送遠程庫(github)
$ git remote add origin 地址 # 爲地址起一個別名origin $ git push origin master # 將本地master分支內容以及版本信息推送到GitHub Username for '': # 輸入GitHub用戶名 Password for '': # 輸入GitHub密碼 $ git push origin dev # 將本地dev分支內容以及版本信息推送到GitHub
在公司第一次使用遠程庫繼續開發
$ git clone https://github.com/WuPeiqi/pondo.git # 將項目從GitHub中獲取 $ cd pondo/ # 切換到工做目錄 $ git branch # 默認獲取到得只有master分支 $ git branch dev origin/dev # 建立dev分支且和遠程dev分支同步 $ vim app01/views.py # 繼續開發新功能 $ git add . # 添加文件到版本庫的暫存狀態 $ git commit -m '公司開發功能1' # 提交新功能到版本庫的分支 $ git push origin dev # 提交dev分支內容到遠程GitHub託管倉庫的dev分支 Username for '': Password for '':
回家繼續開發
$ git checkout dev # 切換到dev分支 $ git pull origin dev # 從遠程GitHub倉庫獲取dev分支最新內容,併合併到本地 $ vim app01/views.py # 繼續開發新功能 $ git add . # 添加文件到版本庫的暫存狀態 $ git commit -m '家裏開發功能1' # 提交新功能到版本庫的分支
$ git push origin dev # 提交dev分支內容到遠程GitHub託管倉庫的dev分支
Username for '':
Password for '':
回公司繼續開發
$ git checkout dev # 切換到dev分支 $ git fetch origin dev # 從GitHub倉庫獲取dev分支最新內容到版本庫的分支 $ git merge origin/dev # 將版本庫的分支內容合併到工做區 $ vim app01/views.py # 繼續開發新功能 $ git add . # 添加文件到版本庫的暫存狀態 $ git commit -m 'xxxxxxxxxxx' # 提交新功能到版本庫的分支
$ git push origin dev # 提交dev分支內容到遠程GitHub託管倉庫的dev分支
Username for '':
Password for '':
設置密鑰(解決每次都要輸入用戶名,密碼):
1. $ ssh-keygen -t rsa -C "youremail@example.com" #配置密鑰
2. 一直默認回車
目錄,裏面有和兩個文件,一個密鑰,一個公鑰
4. 將公鑰複製給github3. .sshid_rsaid_rsa.pub
多人協做工做模式 :
1. 先pull下最新的版本,與本地合併 2. 工做 3. 全部人輪流push,(第一個只用push,其餘人要先pull,再push,由於前人已經作了修改)