feat:新功能(feature) fix:修補bug docs:文檔(documentation) style: 格式(不影響代碼運行的變更)注意不是 css 修改 refactor:重構(即不是新增功能,也不是修改bug的代碼變更) test:增長測試 chore:構建過程或輔助工具的變更 scope: commit 影響的範圍, 好比: route, component, utils, build... footer: 一些備註, 一般是 BREAKING CHANGE 或修復的 bug 的連接.
init_add_status_commit_pushcss
基礎概念html
已提交(committed):已提交表示該文件已經被安全地保存在本地數據庫中了;git
已修改(modified):已修改表示修改了某個文件,但尚未提交保存;github
已暫存(staged):已暫存表示把已修改的文件放在下次提交時要保存的清單中。shell
用戶信息數據庫
$ git config --global user.name "Teaism"
$ git config --global user.email chenliangf1223@sina.comvim
配置文本編輯器segmentfault
$ git config --global core.editor emacs安全
查看配置信息服務器
$ git config --list
查閱某個環境變量的設定
$ git config user.name
刪除某個配置項
$ git config (--local、--global、--system) --unset user.name
獲取幫助
$ git help config
初始化Git倉庫
$ git init
從現有倉庫克隆
$ git clone git://github.com/schacon/grit.git NewFileName
添加文件到倉庫
$ git add Files
建立.ignore文件
$ touch .gitignore
刪除文件(禁用:會從工做目錄和暫緩中同時刪除。)
$ git rm Files
$ git add -A (推薦)
它會把咱們未經過 git rm 刪除的文件所有stage
重命名文件
$ git mv file_from file_to
檢查當前文件狀態
$ git status
提交已暫存區(stage)的內容
$ git commit -m '提交說明'
查看日誌
$ git log (--pretty=oneline)
** 查看文件差異
$ git diff #是工做區(work dict)和暫存區(stage)的比較
$ git diff --cached #是暫存區(stage)和版本庫的比較
$ git diff HEAD -- Files #工做區和版本庫的區別
** 撤銷修改
[https://segmentfault.com/a/1190000007070302]
tips:命令 git checkout –readme.txt 意思就是,把readme.txt文件在工做區作的修改所有撤銷,這裏有2種狀況,以下:
1) readme.txt自動修改後,尚未放到暫存區,使用 撤銷修改就回到和版本庫如出一轍的狀態。
2) 另一種是readme.txt已經放入暫存區了,接着又做了修改,撤銷修改就回到添加暫存區後的狀態。
工做區的代碼想撤銷 ( Files 自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;)
$ git checkout -- Files (git checkout -- . 撤銷全部文件,注意 ' . ')
add到暫存區的代碼想撤銷 (Files 已添加到暫存區後,又修改,如今,撤銷修改就reset回到添加到暫存區後的狀態。再checkout就是恢復到 版本庫同樣的)
$ git reset HEAD Filesname (git reset HEAD . 將全部文件)
$ git checkout -- Files
刪除文件恢復
刪除文件 $ git rm [Filenames] or rm [Filenames]
只要沒有commit以前,若是我想在版本庫中恢復此文件,可使用以下命令:
$ git checkout — b.txt
notes: reset指針直接指向上次提交(慎用),revert 是從新提交(推薦)。
$ git reflog OR $ git log --pretty=oneline (查看提交歷史)。
$ git reset --hard [hash] (推薦這個,hash) OR $ git reset --hard HEAD@{$} ($向前回退幾個版本)
穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。
要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。
從暫緩區刪除文件(但工做區代碼並未刪除)
$ git rm --cached
GIT重置命令
reset命令能夠改變.git/refs/heads/master下分支的引用,而不是永遠指向最新的提交ID。
reflog(.git/logs/refs/heads/master)命令恢復
重置引用後提交歷史信息會丟失,這時可使用reflog命令查看操做日誌,以便進行恢復操做
git reflog show master |head -5 顯示master分之最近五次操做日誌
git reflog -1 顯示HEAD分支最近一次操做日誌
reset命令的兩種用法
用法一:git reset[-q][<commit>][--]<paths>
用法二:git reset[--soft|--mixed|--hard|--merge|--keep][-q][<commit>]
第一種用法不會重置引用和工做區,而是用commit下的文件替換暫存區文件,至關於撤銷git add
第二種則會重置引用,但會根據不一樣的參數從而 影響 工做區或者暫存區,其中commit也能夠省略,默認爲HEAD
使用參數--hard 工做區,引用、暫存區所有替換爲commit
使用參數--soft 只更改引用,工做區和暫存區不影響
使用參數--mixed(不寫默認) 只更改引用和暫存區,不影響工做區
建立並切換到新的分支
$ git checkout -b
至關於:
$ git branch
$ git checkout
查看分支列表
$ git Branch
合併分支
合併Master 和 Branch1 分支:
$ git checkout Master
$ git merge Branch1
合併分支時同一文件同一部分衝突
此時須要到文件中手動保留須要的部分,而後add--commit。
刪除分支( D 表示強制刪除)
$ git branch -d
$ git branch -D
查看分支的合併狀況
$ git log (--graph --pretty=oneline --abbrev-commit)
禁用快捷合併分支
$ git merge --no-ff -m "comments"
查看全部分支(分支顏色區分:白色-本地,綠色-當前,紅色-遠程)
$ git branch -a
切換遠程分支
$ git checkout remotes/origin/master
刪除遠程分支
$ git branch -r -d
$git push origin -d
拉取遠程分支並建立爲本地分支
$ git fetch origin dev:dev
Explain:
修復bug時,咱們會經過建立新的bug分支進行修復,而後合併,最後刪除;
當手頭工做沒有完成時,先把工做現場git stash一下,而後去修復bug,修復後,再git stash pop,回到工做現場。
steps: (以master,dev,bug01分支爲例):
儲存dev當前工做區: $ git stash
切換到master分支上:
新建並切換分支bug01: $ git checkout -b
在新的bug01分支上修復,記得提交;
把bug01分支合併到master分支上,推薦'禁用快捷合併'方式:$ git merge --no-ff -m "comments"
切換到dev分支上
查看先前「儲存‘的工做區: $ git stash list
恢復到指定處: $ git stash apply stash@{$}
成功!
$ git stash //把當前工做現場「儲藏」起來,等之後恢復現場後繼續工做
$ git stash list //列出stash中的全部暫存的內容
方式一:git stash apply //僅恢復,;
$ git stash apply stash@{$} //還能夠指定恢復哪個,stash內容並不刪除
$ git stash drop //來刪除,stash(可是不肯定刪除哪一個??)
方式二:git stash pop //恢復的同時把stash內容也刪了(推薦)
參考: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000
$ git bisect
查看已有標籤列表
$ git tag
新增標籤
$ git tag -a v1.2.0 -m 'my version 1.2.0'
後期加註標籤
$ git tag -a v1.2.0 9fceb02 (9fceb02爲提交時校驗和前幾位)
推進單個標籤到遠程服務器
$ git push origin v1.2.0
推進全部標籤到遠程服務器
$ git push origin --tags
退出vim編輯器:雙擊 D ,按了ESC後輸入命令 :wq!
修改後 保存: ESC :wq 回車鍵
修改後 不保存:ESC :q 回車鍵
單單 git diff 不過是顯示尚未暫存起來的改動,若要看已經暫存起來的文件和上次提交時的快照之間的差別,能夠用 git diff --staged;
**遠程操做的第一步,最好從遠程主機克隆一個版本庫: git clone. 否則容易出現 not shell access
clone-pull-fetch-push
測試遠程倉庫連接是否成功
$ ssh -T git@github.com
測試443端口是否可用
$ ssh -T -p 443 git@ssh.github.com
添加遠程倉庫
$ git remote add origin git@github.com:Teaism/gitremote.git
展現遠程倉庫信息
$ git remote show mcvideo(別名)
查看當前遠程倉庫
$ git remote -v
推送到遠程倉庫
$ git pull origin master/dev (第一次推送以前需拉取遠程的)
$ git push -u origin master
$ git push origin master (之後的推送)
**代碼合併【注:pull=fetch+merge(拉取併合並=拉取+合併)](最好不要直接用pull,而是分開用) 。
$ git pull (mcvideo master) 無括號裏表示拉取全部併合並
$ git fetch (mcvideo master) 無括號裏表示拉取全部
$ git merge dev (合併dev到當前分支)
直接從遠程origin的dev分支建立到本地dev來:
$ git checkout –b dev origin/dev
$ git pull origin master/dev/test 從遠程倉庫拉取指定分支
tips: git pull若是失敗了,緣由是沒有指定本地dev分支與遠程origin/dev分支的連接,根據提示,設置dev和origin/dev的連接:
$ git branch --set-upstream dev origin/dev (// 本地遠程分支關聯: git branch --set-upstream-to=origin/ <遠程分支名> <本地分支名> 如設置當前分支,第二個參數可省略,;)
origin: 如未指定,表示遠程倉庫的別名
合併pull兩個不一樣的項目:
報錯:fatal: refusing to merge unrelated histories
解決方法:git pull origin master --allow-unrelated-histories
衝突:
一、放棄工做區修改,
本地倉庫代碼徹底覆蓋本地工做區間,具體指令以下:
$ git checkout head .
(注意: 別遺漏 "head" 後的 " ." )
而後更新遠程倉庫的代碼就不會出現衝突了:
$ git pull
二、解決衝突後提交本地修改
$ git stash
$ git stash save "這些是註釋啦"
$ git pull
$ git stash pop
手工解決衝突,
而後add-commit-push
刪除遠程分支
$ git push origin --delete Branchname
遠程倉庫的重命名和刪除
$ git remote rename pb paul
$ git remote rm paul
從commit裏取消去某個文件夾的跟蹤
git rm -r --cached path_to_your_folder/
## 合併幾個commit
[http://zerodie.github.io/blog/2012/01/19/git-rebase-i/]
git merge 和 git rebase 的區別: [http://blog.csdn.net/wh_19910525/article/details/7554489]
$ git rebase -i commit-hash(不改變的那個)
進入vim
pick 的意思是要會執行這個 commit (第二新提交)
squash 的意思是這個 commit 會被合併到前一個commit (最新提交,合併到第二新提交)
Esc:wq ,保存並退出。成功。
git log --pretty=oneline 查看結果。
如操做錯誤隨時終止 $ git rebase --abort,會回到未開始合併以前的狀態。
git pull # 抓取遠程倉庫全部分支更新併合併到本地
git pull --no-ff # 抓取遠程倉庫全部分支更新併合併到本地,不要快進合併
git fetch origin # 抓取遠程倉庫更新
git merge origin/master # 將遠程主分支合併到本地當前分支
git co --track origin/branch # 跟蹤某個遠程分支建立相應的本地分支
git co -b
git push # push全部分支
git push origin master # 將本地主分支推到遠程主分支
git push -u origin master # 將本地主分支推到遠程(如無遠程主分支則建立,用於初始化遠程倉庫)
git push origin
git push origin
git push origin :
GitHub
git remote -v # 查看遠程服務器地址和倉庫名稱
git remote show origin # 查看遠程服務器倉庫狀態
git remote add origin git@ github:robbin/robbin_site.git # 添加遠程倉庫地址
git remote set-url origin git@ github.com:robbin/robbin_site.git # 設置遠程倉庫地址(用於修改遠程倉庫地址) git remote rm
建立遠程倉庫
git clone --bare robbin_site robbin_site.git # 用帶版本的項目建立純版本倉庫
scp -r my_project.git git@ git.csdn.net:~ # 將純倉庫上傳到服務器上
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服務器建立純倉庫
git remote add origin git@ github.com:robbin/robbin_site.git # 設置遠程倉庫地址
git push -u origin master # 客戶端首次提交
git push -u origin develop # 首次將本地develop分支提交到遠程develop分支,而且track
git remote set-head origin master # 設置遠程倉庫的HEAD指向master分支
也能夠命令設置跟蹤遠程庫和本地庫
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop
參考:[http://www.cnblogs.com/cspku/articles/Git_cmds.html]
[http://shaofan.org/git/]