git&github--基礎認識(一)[雲圖智聯]

1 git簡介

  1. git爲分佈式版本控制系統,svn是集中式版本控制系統
  2. 集中式:版本庫存放在中央服務器,工做時,用本身電腦先從中央服務器取得最新的版本,幹完活後,再把本身的活推送給中央服務器
  3. 分佈式版本控制系統:沒有中央服務器,每一個人的電腦上都是一個完整的版本庫,當你在本身電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,大家倆之間只需把各自的修改推送給對方,就能夠互相看到對方的修改了。但在實際使用分佈式版本控制系統時,其實不多在兩人之間的電腦上推送版本庫的修改,由於可能兩人不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。所以,分佈式版本控制系統一般也有一臺充當「中央服務器」的電腦,但這個服務器的做用僅僅是用來方便「交換」你們的修改,沒有它你們也同樣幹活,只是交換修改不方便而已

2 git中的幾個重要概念

  1. 工做區:你在電腦裏能看到的目錄
  2. 版本庫:工做區中一個隱藏的".git"文件就是Git的版本庫,版本庫中包含如下重要內容git

    1. 暫存區(stage)
    2. Git自動建立的master分支,以及指向master的指針HEAD

image.png

3 git基本功能

  1. 由於Git是分佈式版本控制系統,因此,每一個機器提交時都必須自報家門,可使用以下命令設置你的名字和Email地址
#這個命令,會在"~/.gitconfig"文件中添加信息
#--global參數,用了這個參數,表示你這臺機器上全部的Git倉庫都會使用這個配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
  1. 版本庫又名倉庫,英文名repository,你能夠簡單理解成一個目錄,這個目錄裏面的全部文件均可以被Git管理起來
#將當前目錄變成Git能夠管理的倉庫,命令執行後,當前目錄下多了一個.git隱藏文件
git init
  1. 將文件添加到暫存區
git add 文件名
  1. 將暫存區全部文件提交到當前分支
#若是不執行git add,而直接執行git commit,那麼修改內容不會被提交。也就是說git commit只負責把暫存區的修改提交
git commit -m "本次提交的說明"
#同時完成git add和git commit兩個操做
git commit -am README.md
  1. 從近到遠顯示提交日誌
git log
#省略一些沒必要要信息
git log --pretty=oneline
  1. 還原到指定版本
#1. HEAD指向當前分支master的最後一次提交
#2. HEAD^指向當前分支master的上一次提交
#3. HEAD^^表示上兩個,HEAD~100表示上100個
#4. 注意,若是使用git reset從版本10,退回到版本5,在版本5中使用git log命令,就沒法顯示6-10版本的相關信息,例如commit id
git reset --hard HEAD^
  1. 前進到指定版本
#1. 用來記錄你的每一次命令,在這裏能找到以前提交的commit id
git reflog
#2. 利用commit id前進到指定版本,最後一個參數爲commit id,是一個哈希值,寫4位以上便可
git reset --hard 1094a
  1. 查看工做區與暫存區(當前版本)區別
git diff
#比較工做區與當前版本(已commit中內容)區別
git diff HEAD
#比較工做區與當前版本中指定文件區別
git diff HEAD -- 文件名

9.撤銷工做區的修改github

  1. 若是文件自修改後尚未被放到暫存區,會將該文件撤銷到和最新版本庫中內容相同
  2. 若是文件已被放到暫存區後又作了修改,會將該文件撤銷到放到暫存區後的狀態
#若是不加"--"",就變成了"切換到另外一個分支"的命令
git checkout -- readme.txt

10.撤銷暫存區的內容服務器

#注意這是將git add操做撤銷,而上面是撤銷工做區的修改,其實本質上就是恢復到了指定的版本
git reset HEAD readme.txt

11.從版本庫中刪除文件ssh

#1. 先在工做區刪除,若是此步驟爲誤刪,可使用上面介紹的git checkout -- readme.txt恢復工做區內容
rm test.txt
#2. 在暫存區中提交刪除
git rm test.txt
#3. 提交到版本庫
git commit -m "remove test.txt"

12.查工做目錄和暫存區的狀態,和git log區別在於,後者用於查看commit的信息,前者用於查看當前目錄與最新版本的區別,以及暫存區與最新版本的區別分佈式

git status

4 github使用

4.1 在github上建立帳戶

4.2 設置 SSH Key

1.使用https url和SSH url均可以將遠程項目克隆到本地svn

2.使用ssh克隆時,你必須是你要克隆的項目的擁有者或管理員,且須要先添加 SSH key ,不然沒法克隆fetch

3.能夠先使用本身電腦建立SSH key公鑰和私鑰,而後將公鑰告訴給github,這樣,就能夠在本身的電腦上,經過ssh協議,使用私鑰來訪問github的服務器了url

4.設置流程
1.本機建立建立一個 SSH keyspa

#-t 指定密鑰類型,默認是 rsa ,能夠省略。
#-C 設置註釋文字,好比郵箱。
#-f 指定密鑰文件存儲文件名,默認文件名爲id_rsa(私有密鑰)和id_rsa.pub(公開密鑰)
ssh-keygen -t rsa -C "your_email@example.com"
#Generating public/private rsa key pair.
#Enter file in which to save the key
#(/Users/your_user_directory/.ssh/id_rsa):
#按回車鍵
#Enter passphrase (empty for no passphrase):
#輸入push文件的時候要輸入的密碼,能夠不輸密碼直接回車
#Enter same passphrase again:
#再次輸入密碼

2.github上添加公開密鑰,從此就能夠用私有密鑰進行認證了,在SSH Keys中粘貼 id_rsa.pub 文件裏的內容版本控制

cat ~/.ssh/id_rsa.pub
  1. 修改私鑰密碼
cd ~/.ssh
#修改私鑰,執行命令後提示輸入密碼,兩次都直接回車就能夠去掉密碼,去掉密碼後,git push就再也不須要輸入密碼
ssh-keygen -p -f id_rsa

4.3 在github上建立倉庫:Create repository

4.4 從遠程倉庫克隆到本地

#此處也可使用https協議克隆
#克隆後,Git會自動把本地的master分支和遠程的master分支對應起來了,遠程倉庫的默認名稱是origin
git clone git@github.com:michaelliao/gitskills.git
#查看遠程庫信息
git remote
#查看遠程庫詳細信息,若是沒有推送權限,就看不到push的地址
#origin  git@github.com:michaelliao/learngit.git (fetch)
#origin  git@github.com:michaelliao/learngit.git (push)
git remote -v
#刪除遠程庫
git remote rm origin

4.5 若是已經存在本地倉庫,也能夠額爲本地庫添加遠程倉庫

#1. 建立本地庫
#2. 在github上建立倉庫
#3. 爲本地庫關聯遠程庫
    #1. 注意michaelliao必須是本身的倉庫,若是是別人的,雖然能加上,但push不上去,由於你的SSH Key公鑰不在他人的帳戶列表中
    #2. 添加後,origin爲遠程倉庫別名,這是Git默認的叫法,也能夠改爲別的
git remote add origin git@github.com:michaelliao/learngit.git

4.6 本地庫與遠程庫內容交互

#1. 將本地庫中當前分支推送到遠程的master分支上
git push origin master
#2. 拉取
git pull origin master
相關文章
相關標籤/搜索