Git學習地址-廖雪峯的官方網站 git
1 本地Git倉庫的建立 web
在使用Git前想到的就是怎樣顯示是本身提交的名字 app
$ git config --global user.name "你的名字" # 設置提交名字 ssh
$ git config --global user.email "你的email" # 設置email學習
git init 建立一個空的git倉庫 網站
建立好後能夠經過git add <file> 命令添加文件,如:git add readme.md spa
最後經過git commit 提交 .net
$ mkdir GitSutdy 日誌
$ cd GitStudy orm
$ git init # 此時建立了一個Empty Git倉庫啊
$ touch readme.md #新增長一個readme.md文件
$ git add readme.md # 將readme.md文件添加到倉庫
$ git commit -m "add readme.md" # 提交所加文件到倉庫
2 遠程倉庫
遠程倉庫建立:在git.oschian.net上建立一個遠程倉庫 GitStudy
1)將遠程倉庫從git上clone下來:
$ git clone git@git.oschina.net:wangcccong/GitStudy.git
此時可會出現Permission denied,須要添加一個ssh public key:
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "wangcccong@outlook.com" #(生成一個rsa,名字自定義:加上叫id_rsa) 此時你的.ssh會多出兩個文件 id_rsa id_rsa.pub
$ cat id_rsa.pub # 將公匙取出,填入網站便可(公匙標題隨意取,而後將cat 出來的公匙拷貝粘貼到網站)
$ ssh -T git@git.oschina.net # 出現Welcome git@osc xxx)及配置公匙成功
再次調用git clone git@git.oschina.net:wangcccong/GitStudy.git便可
注意:
git clone 默認會把整個遠程倉庫克隆下來,可是隻會建立master 分支,若是還存在其餘分支
$ git branch -r # 或者 git branch -a 查看全部分支
origin/HEAD -> origin/master
origin/dev
origin/master
$ git checkout origin/dev # 將遠程分支checkout
$ git checkout -t dev # 在本地建立一個和遠程同樣名字的分支
2)將遠程倉庫與本地倉庫合併:
$ git remote add origin git@git.oschina.net:wangcccong/GitStudy.git (將遠程倉庫與本地倉庫合併)
$ git push -u origin master # 推送倉庫
3 Git時光穿梭機
1) git版本回退
當前若是新增了文件,或者修改了文件等其餘操做而且已經git commit,發現問題須要回退到以前版本
$ git reset --hard HEAD^ # (HEAD^ 回到上一個版本 HEAD^^ 回到上一個的上一個版本,HEAD~100 回到以前的第100個版本)
還能夠經過(git log 查看提交日誌,git reflog 查看命令日誌)
$ git log --pretty=oneline # 查詢到改變版本的id
$ git reset --hard idxxx
2) 管理修改
$ git status # 查看當前狀態
$ git add <file> # 添加文件或者文件夾
$ git diff # 查看衝突
$ git commit # 提交
3) 撤銷修改
$ git checkout -- readme.txt # "--" 很重要,若是木有"--" 則命令就變爲了切換分支
$ git reset HEAD readme.txt # 將暫存區的文件撤銷
4) 刪除文件
$ git rm <file> #(刪除文件) 若是刪除錯誤能夠經過上述 git checkout -- <file>恢復
4 Git分支管理
1)建立與合併分支
$ git checkout -b dev #(建立+切換分支dev)與下面兩句同樣的功能
$ git branch dev
$ git checkout dev
$ git branch -d dev #刪除分支
$ git branch #查看當前分支及版本庫存在哪些分支#
*dev
master
$ git checkout dev # 將分支切換到dev
Switched branch to 'dev'
若是修改了某個分支,但願裏面的內容與其餘分支合併則經過
$ git merge dev # 則將當前所在分支與dev合併
2)分支管理狀況
$ git merge dev 默認採用的是Fast Forward方式合併分支,在這種模式下合併分支後會丟掉分支信息,若是須要在後續可以看出來合併的歷史信息,能夠加上--no-ff
$ git merge --no-ff -m "merge with no-ff" dev
3) Bug分支
在開發中遇到bug須要修改,這個時候就須要從新建立一個bug分支如:issue-101,可是當前在分支dev 上進行了修改,可是又不想將當前修改當即提交併,可使用
$ git stash 將分支暫時「儲藏」起來,等之後恢復後繼續工做
// 以下:假設將README.md文件中的「Git is free software...」改成「Git is a free software...」,而後提交
$ git checkout dev # 切換到dev分支下,若是當前有修改,可是不想合併提交
$ git stash
$ git checkout master # 進入master分支下修改README.md
$ git checkout -b issue-101
$ git add README.md
$ git commit -m "fix bug 101"
修復完成後回到master分支
$ git checkout master
$ git merge --no-ff -m "merged bug fix 101" issue-101
修復完bug後回到dev繼續工做
$ git checkout dev
$ git status # 查看更狀態
# On branch dev
nothing to commit (working directory clean) # 工做區是乾淨的無任何修改
$ git stash list # 查看剛纔「儲藏」的工做到哪兒去了
stash@{0}: WIP on dev: 6224937 add merge
$ git stash apply # 恢復工做
$ git stash drop # 刪除stash內容 或者使用 git stash pop 完成上兩個動做
4) Feature分支
$ git checkout -b feature
Feature分支用於在接到新功能的狀況下新建分支,Feature分支與bug分支相似,新建-處理-合併-刪除;可是當你在合併前有可能如今你接到一個命令說,當前功能不須要作了,須要刪除新功能:
$ git branch -d feature
此時會出現銷燬失敗,可使用
$ git branch -D feature # 強行刪除分支
在此感謝 - 在此感謝廖雪峯的:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000