最近在系統地學習使用Git,並瞭解Git進行版本控制的原理,以更好地學以至用。html
如下是學習過程當中整理的知識點總結。linux
1. 官網下載安裝Gitgit
開始菜單找到git → git bash(或者在某個文件夾下面 右鍵 -> git bash here)github
配置/修改用戶信息 $ git config --global user.name "Your Name" // --global參數表示全局配置,也能夠針對不一樣倉庫配置不一樣用戶名和email $ git config --global user.email "email@example.com" 查看用戶信息: $ git config --global user.name $ git config --global user.emailvim
$ mkdir learngit // 新建一個文件 $ cd learngit // 進入文件 $ git init // 把文件目錄變成git倉庫windows
在learngit下新建文件readme.txt $ git add readme.txt // 將文件添加到倉庫 $ git commit -m "add readme file" // 提交文件bash
修改readme.txt文件 $ git status // 查看當前狀態 $ git diff // 查看修改的內容 $ git add filename $ git commit -m "some describe for this commit"app
$ git log // 查看日誌 $ git log --pretty=oneline // 一條記錄顯示在一行 $ git reset --hard HEAD^ // 回到上一個提交,HEAD^^回到上上個提交, $ git reset --hard HEAD^^ // 回到上上個提交 $ git reset --hard 8adc // 回到commit id開頭爲8adc的版本 $ git reflog // 查看操做記錄ssh
一個git目錄能夠分爲兩個部分:編輯器
版本庫包含暫存區stage、master分支(包含一個HEAD指針)。 提交文件必須先提交到stage再提交到分支上。 $ git add filename // 將工做區的文件提交到stage $ git commit -m "..." // 將stage區的文件提交到分支上 $ git diff HEAD -- filename // 查看工做區和分支上代碼的區別
工做區:git checkout -- filename // 清理工做區(距離上次add或commit後所作的修改)
stage: 1. git reset HEAD filename // stage → 工做區(把上次add但未提交的stage中的內容打回工做區) 2. 清理工做區
分支: git reset --soft HEAD^ // HEAD^表示上一個版本,也能夠寫做HEAD~1;soft表示不刪除工做區改動代碼,撤銷commit,不撤銷git add .;harg表示刪除工做區改動代碼,撤銷commit,撤銷git add . git commit --amend // 只修改註釋,進入vim編輯器,修改完註釋後保存便可
新建一個文件test → add → commit 此時git分支保存了新文件test,刪除文件的幾種方式以下:
恢復文件的方法同【撤銷修改】
添加遠程倉庫須要兩步操做:本地生成SSH Key添加到遠程倉庫、本地倉庫與遠程倉庫關聯。
1.建立SSH Key $ ssh-keygen -t rsa -C "your@email.com" // 生成一個公鑰id_rsa.pub和一個私鑰id_rsa $ cd ~ // 進入用戶主目錄 $ cd .ssh $ ls // 列出全部文件 $ cat id_rsa.pub // 查看文件內容 複製內容到 git/github -> Account Setting -> SSH -> 粘貼
2.關聯遠程倉庫 git/github建立倉庫 $ git remote add origin github.com/example/lea… // 本地倉庫關聯遠程倉庫 $ git push -u origin master // 推送本地倉庫到遠程倉庫master分支 -u表示第一次推送 $ git push origin master // 後續推送到遠程分支
以上失敗時: $ git remote rename oroigin old-origin $ git remote add origin git @.../project-name.git $ git push -u origin --all
git/github新建倉庫 → Clone or download → 複製連接(HTTPS or SSH) $ git clone git@github.com:example/gitskills.git $ cd gitskills
克隆到本地後的倉庫只有master分支,須要新建dev分支並和遠程分支關聯 $ git checkout -b dev origin/dev $ git branch --set-upstream-to=origin/dev dev
Git支持多種協議,默認的git://使用ssh,但也可使用https等其餘協議 使用https速度慢,每次推送都必須輸入口令,可是在某些只開放http端口的公司內部就沒法使用ssh協議而只能用https
若是在git上新建了一個分支,只需在本地運行: $ git fetch $ git checkout branchName
查看分支:git branch 建立分支:git branch 切換分支:git checkout 建立+切換分支:git checkout -b 合併某分支到當前分支:git merge 刪除分支:git branch -d 強行刪除:git branch -D
分支開發策略:master用來發布新版本 dev用來開發 在dev上新建分支開發,完成後合併到dev分支,再新開分支
若是兩個分支同時修改了一個文件,merge的時候會衝突 $ git merge feature1 在IDE裏解決完衝突 → add → commit (此時master就是修改後的,feature1是修改前的) $ git checkout feature1 $ git merge master // feature1和master同步了,此時不會衝突
合併分支策略 $ git merge dev // Fast forward模式,將master指針指向dev的最新一次commit,此時master和dev的commit id相同 $ git merge --no--ff -m "提交信息" dev // 禁用Fast foward模式,merge時會生成一個新的commit
當同時修改了同一個文件時會致使git push失敗,必須先git pull → 解決衝突 → git push git pull若是提示no tracking information說明沒有建立本地分支與遠程對應分支的連接關係,經過如下方式設置: $ git branch --set-upstream-to=origin/dev dev // 本地分支dev關聯遠程分支origin/dev 再git pull
git stash用於將「修改過的被追蹤的文件和暫存的變動」及stage和工做區的修改暫存起來。
stash的範圍: Changes to be committed(stage) Changes no staged for commit(工做區)
$ git stash // 存檔當前的改動並清理工做區和stage $ git stash list // 羅列全部的存檔 $ git stash apply // 讀取最近的一次存檔 $ git stash apply stash@{0} // 指定讀取某次存檔 $ git stash drop // 刪除存檔 $ git stash pop // 讀取並刪除最近一次存檔
這部份內容的參考教程: gitbook.liuhui998.com/4_2.html git-scm.com/book/zh/v1/…
步驟 | 圖示 |
---|---|
假設有兩個分支:master、experiment |
![]() |
切換到experiment分支執行rebase $ git checkout experiment $ git rebase master 取出experiment分支上的提交C4接到master分支上的最新提交C3後面,將experiment指向C4'。此時experiment分支的進度是最新的,而master分支無變化。 rebase時若是出現了衝突: 打開IDE解決衝突 $ git add . $ git rebase --continue 若是要終止rebase: $ git rebase --abort |
![]() |
切換到master分支執行merge $ git checkout master $ git merge experiment 此時master將指向最新的commit |
![]() |
能夠給每次commit打一個標籤來增長辨識度。
$ git tag v1.0 // 給當前分支的最新提交打標籤 $ git tag v0.9 commitid // 給某次commit打標籤 $ git tag -a v0.1 -m "version 0.1 released" commitid // 給某次提交建立帶有說明的標籤 -a指定標籤名 -m指定說明文字 $ git tag // 查看全部標籤 $ git show v0.9 // 查看某個標籤的詳細信息 $ git push origin v1.0 // 將某個標籤推送到遠程 $ git push origin --tags // 將所有本地標籤推送到遠程 $ git pull origin --tags // 拉取遠程標籤 $ git tag -d v0.1 // 刪除本地某個標籤 刪除遠程標籤: $ git tag -d v0.9 $ git push origin :refs/tags/v0.9
$ git log --graph --pretty=oneline --abbrev-commit // git log --graph查看分支合併圖 $ git remote // 查看遠程命名 $ git remote -v // 查看遠程庫信息 $ pwd // 顯示當前文件路徑 $ ls // 查看該目錄下的全部文件 $ cat filename // 查看文件內容 $ vi filename // 進入文件編輯模式
學習參考教程:www.liaoxuefeng.com/wiki/001373…
Linux命令大全:www.runoob.com/linux/linux…