Git簡介
Git誕生
集中式管理收費,分布式管理BitKeeper收費,后來由于有人破解,BitKeeper對Linux平臺收回使用權,Linus用兩個星期用C開發了分布式版本管理系統Git。
集中式和分布式
集中式SVN、CVS必須聯網,如果使用需先從中心服務端更新數據,編寫代碼之后還要上傳回中心服務
分布式無需中心服務
windows安裝
msysgit是Windows版的Git,從https://git-for-windows.github.io下載(網速慢的同學請移步國內鏡像),然后按默認選項安裝即可。
安裝完成后,在開始菜單里找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的東西,就說明Git安裝成功!
安裝后需要配置
$ git config --global user.name "yourname"
$ git config --global user.email "email@email.com"
讓git管理某一個文件夾
初始化,把這個目錄變成git可管理的目錄
$ git init
其中的.git是git用來管理版本庫的,默認是隱藏文件
版本控制系統可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但沒法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是只知道圖片從100KB改成了120KB,但到底改了啥,版本控制系統不知道,也沒法知道。
把文件放入git
$ git add "文件名"
$ git add -A//添加所有改動
$ git add *//添加新建文件和修改,不包含刪除
$ git add .//添加新建文件和修改,不包含刪除
$ git add -u//添加修改和刪除,但是不包括新建
提交
$ git commit -m ""
在commit之前撤銷add文件
$ git reset //撤銷提交單獨文件
$ git reset//撤銷所有
-m后面是用來說明這次文件修改了什么
每次修改都要git add -A,然后再git commit把修改的內容提交,add是把內容存在暫存區,
$ git status用來查看倉庫的狀態
no changes added to commit (use "git add" and/or "git commit -a")
上一句表示有文件修改,但是沒有提交
$ git diff用來查看修改了什么東西,也就是之前$ git commit -m輸入的內容
版本回退
$ git log用來查詢之前的信息記錄,單行顯示用$ git log --pretty=oneline,顯示方式是從近到遠,HEAD表示是當前的版本,前面的數字是commit id
$ git reset --hard 3628164回退到某一個版本
$ git reflog可以查看之前做過的操作,可以再回退錯誤的情況下返回
暫存區和工作區
git 默認會為我們創建一個默認分值master,以及指向master的指針head
.git是git的版本庫,其中最重要的是stage(暫存區)
add指令相當于將文件提交到暫存區(stage),commit是把文件提交到分支
撤銷修改
git checkout -- file如果工作區修改內容沒有提交到stage,直接恢復到沒修改之前的,如果沒有提交到分支,那就回到上一次緩存區內容
刪除操作
git rm file從版本庫中刪除某個文件
創建SSH KEY
Github需要通過公鑰來識別是否是你提交的
$ ssh-keygen -t -rsa -C "郵箱地址"
登錄github在設置中找到SSH and GPG Key 把SSH中title隨意些,下面粘貼上user目錄下的.ssh下的id_rsa.pub的內容
添加遠程庫
(這種方法是現有的本地庫,后有遠程庫)
在github中create a new repo 按鈕,創建一個遠程庫
$ git remote add origin git@github.com:“自己的地址”把本地頁面與遠程庫關聯;
$ git push -u origin master第一次,遠程庫中沒有數據,需要使用該指令將本地版本庫中內容push到遠程庫
以后只要本地做了修改,使用add、commit 然后使用$ git push origin master即可同步到遠程庫
從遠程庫克隆
(這種辦法是現有遠程庫,然后克隆到本地)
首先先創建一個遠成倉庫,在github上創建
git clone git@github.com:brightestcandle.git用來clone一個遠程倉庫到brightestcandle文件夾下,會在打開gitbanch目錄下創建
把文件放到該目錄下之后,addcommit -m “” git push即可
*此處需要注意的是,git支持https協議,使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。