Git note

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使用命令

獲取幫助

$ 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

版本回退(未提交到遠程可回退,不然可本地回退再push到遠程覆蓋)

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

第二種則會重置引用,但會根據不一樣的參數從而 影響 工做區或者暫存區,其中commit也能夠省略,默認爲HEAD

使用參數--hard 工做區,引用、暫存區所有替換爲commit

使用參數--soft 只更改引用,工做區和暫存區不影響
使用參數--mixed(不寫默認) 只更改引用和暫存區,不影響工做區

git 分支

建立並切換到新的分支

$ 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

修復Bug分支

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" 到此bug修復成功。下面是回到先前的工做區:
切換到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

bug排查

$ 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遠程關聯管理

**遠程操做的第一步,最好從遠程主機克隆一個版本庫: 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 origin/ # 基於遠程分支建立本地分支,功能同上

git push # push全部分支

git push origin master # 將本地主分支推到遠程主分支

git push -u origin master # 將本地主分支推到遠程(如無遠程主分支則建立,用於初始化遠程倉庫)

git push origin # 建立遠程分支, origin是遠程倉庫名

git push origin : # 建立遠程分支

git push origin : #先刪除本地分支(git br -d ),而後再push刪除遠程分支

Git遠程倉庫管理

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/]

相關文章
相關標籤/搜索