當出現問題時,咱們能夠快速的經過版本和版本庫讓代碼回到沒有問題的版本而不用一行一行的撤銷回去;此外,版本還會記錄是誰改動的,改動了哪裏,方便比對和管理;linux
git 分佈式版本控制工具git
svn 集中式版本控制工具github
集中式:bash
有一個遠程服務器,用來存儲全部成員的代碼和代碼版本庫,用戶全部的版本都直接提交到遠程服務器;服務器
分佈式也有一個遠程服務器,可是項目成員本地也有一個服務器,用於記錄版本;若是想要提交版本到遠程服務器,須要先將變動添加到本地版本,而後再把本地版本庫同步給遠程服務器。網絡
svn必須經由網絡把變動推送到服務器才能生成版本;並且通常svn服務器都是部署在內網的;運維
git能夠不用網絡生成本地版本,可是把本地版本庫同步到遠程服務器是須要網絡的;ssh
git用的linux的命令行;分佈式
git config --list : 查看當前的配置信息
git remote -v : 查看當前倉庫和哪一個遠程倉庫關聯
複製代碼
git有三個區:工做區、暫存區、歷史區。其中暫存區和歷史區都是在版本庫中;svn
1.檢查本地倉庫文件狀態
git status
複製代碼
若是有紅色文件,表示這些文件的更改處於工做區中;
若是爲綠色,說明文件以及進入了暫存區;
git diff 工做區和暫存區比較
複製代碼
git diff -cached 暫存區和歷史區比較
git diff master 工做區和歷史區比較
複製代碼
3.通過diff後,確認這些修改都要保留後將工做區添加到暫存區
git add . | 文件名
複製代碼
4.若是添加後後悔了,能夠刪除暫存區中的文件
git rm --cached + 文件名
複製代碼
或者:拉取暫存區中的文件覆蓋當前工做區中的內容(一般用來作放棄修改當前工做區中的修改,可是至於暫存區中有這個文件才能生效)
5.暫存區添加到歷史區
git commit -m'提交版本註釋'
複製代碼
把暫存區的修改添加到歷史區;添加到歷史區就會生成一個版本,這個版本有一個版本號;註釋必定要寫,描述本次你改了什麼,方便有一天你要回退到這個時間點
6.把本地的修改提交到遠程倉庫:
git pull origin master 同步遠程倉庫中的版本庫
git push origin master 把本地的版本庫同步到遠程倉庫
複製代碼
1.查看版本庫中的歷史記錄,會有提交註釋和版本號,經過版本號能夠回退到任意版本;
git log
複製代碼
2.回退到某一個版本 (回滾,若是上線出現問題就須要回滾到上一個)
git reset --hard 版本號
複製代碼
git的遠程倉庫在創立之初存在一個默認分支master,這個分支稱爲主幹;這個分支上保存着線上運行的代碼,是通過測試的沒有問題的代碼;
真實項目開發中咱們咱們通常不在master上作開發,都是基於master新開一個分支做爲開發分支;每一個分支都有本身的版本庫,記錄在不一樣的分支上的變動;
分支是在開分支一刻master的一個快照,master裏面的代碼當時長什麼樣子,分支裏面的代碼就會長什麼樣子;接下來全部的開發都是在分支上完成的;
當開發完成後再把分支合併到master上;在合併以前要同步master上的代碼到分支上,而後再把分支合併到master,此時master就有了本次分支開發的內容,
最後再把本地master的版本庫同步到遠程的master,能夠push,通常使用merge request;
git checkout -b 分支名
複製代碼
git branch 分支名
// 這種方式創建的分支並不會自動切換到分支
複製代碼
git checkout 目標分支名
複製代碼
git branch -D 分支名
複製代碼
git merge 分支1
// 把分支1上的修改合併到當前分支
複製代碼
注意每一個分支有本身的獨立的版本庫,在分支a上的修改,若是不作合併,b分支上是不會有的;
1.首先克隆遠程倉庫到本地:git clone xxx.xxxx.xxxx,此時本地倉庫的分支處於master
2.在遠程開一個分支,在github或者gitlab上操做,這個分支稱爲遠程分支,例如分支名feature_0711
3.在本地開一個和遠程分支名字相同的本地分支:git checkout -b feature_0711
4.同步本地分支和遠程分支,git pull origin feature_0711
5.在本地開發,開始修改本地目錄中的文件;
6.適時的add commit,而後同步遠程分支,具體操做以下:(防止丟失或者本地誤刪)
1.當開發結束後用分支提測,feature_0711
2.通常會要同步master上的代碼,就是把master代碼合併到當前分支,具體操做以下:
3.從當前分支feature_0711 切換到master
4.切換到master後執行 git pull origin master 同步遠程master代碼到本地
5.而後再切換回分支feature_0711,在分支上把master的代碼合併到分支;
6.若是有衝突,就解決衝突;解決完衝突 add commit 而後push到遠程分支;
測試階段若是修改bug只須要在分支上修改,而後add commit,而後再push到遠程分支;
1.同步master上的代碼,而後push到遠程分支;
2.把分支合併到master,若是你是項目全部人你能夠push到master;可是通常人須要提交merge request(github上pull request);
3.提交merge request後,找有權限的人合併;
4.合併後通知上線人員發版(通常是運維的人);
1.若是使用github,把項目成員添加到 settings -> collaborators -> add collaborators
2.若是使用gitlab,你入職的時候找領導給你開帳號,而後讓他把你加到項目中就能夠了;
1.生成ssh-key:進入到家目錄;在git bash中輸入:cd ~
2.進入 家目錄中的 .ssh/ 目錄:cd .ssh/,若是沒有能夠新建:mkdir .ssh
3.執行: ssh-keygen 一路回車便可
4.cat id_rsa.pub 文件
5.複製上一步cat出來的結果
6.打開github或者gitlab,進入我的設置 settings -> SSH and GPG keys -> new SSHKey
7.title是對這個key的描述,把複製的key粘貼到key中,點擊 Add SSH key;
8.後面再clone項目時改用SSH協議,之後全部的操做都不須要密碼;
注意SSH只對當前的設備有效,由於ssh-key是存在設備上的,換電腦就沒戲了;