Git的安裝: Windows上操作。
1、安裝安裝包地址:http://msysgit.github.io/

一路next,直接安裝上,完成安裝之后,就可以使用命令行的 git 工具(已經(jīng)自帶了 ssh 客戶端)了,另外還有一個圖形界面的 Git 項目管理工具。
在開始菜單里找到"Git"->"Git Bash",會彈出 Git 命令窗口,你可以在該窗口進行 Git 操作。
2、安裝完成之后一系列命令操作
一般公司申請賬戶,郵箱,相對用的注冊賬戶郵箱方式:
$ git config --global user.name "gongxiaozhu"
$ git config --global user.email "gongxiaozhu@qq.com"
3、查看配置信息
git config --list
Git config user.name
git config user.email
Git 工作區(qū)、暫存區(qū)和版本庫
我們先來理解下Git 工作區(qū)、暫存區(qū)和版本庫概念
工作區(qū):就是你在電腦里能看到的目錄。
暫存區(qū):英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區(qū)有時也叫作索引(index)。
版本庫:工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū),而是Git的版本庫。
下面這個圖展示了工作區(qū)、版本庫中的暫存區(qū)和版本庫之間的關系:

圖中左側為工作區(qū),右側為版本庫。在版本庫中標記為 "index" 的區(qū)域是暫存區(qū)(stage, index),標記為 "master" 的是 master 分支所代表的目錄樹。
圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"游標"。所以圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來替換。
圖中的 objects 標識的區(qū)域為 Git 的對象庫,實際位于 ".git/objects" 目錄下,里面包含了創(chuàng)建的各種對象及內(nèi)容。
當對工作區(qū)修改(或新增)的文件執(zhí)行 "git add" 命令時,暫存區(qū)的目錄樹被更新,同時工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區(qū)的文件索引中。
當執(zhí)行提交操作(git commit)時,暫存區(qū)的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區(qū)的目錄樹。
當執(zhí)行 "git reset HEAD" 命令時,暫存區(qū)的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區(qū)不受影響。
當執(zhí)行 "git rm --cached <file>" 命令時,會直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。
當執(zhí)行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個操作很危險,會清除工作區(qū)中未添加到暫存區(qū)的改動。
當執(zhí)行 "git checkout HEAD ." 或者 "git checkout HEAD " 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個命令也是極具危險性的,因為不但會清除工作區(qū)中未提交的改動,也會清除暫存區(qū)中未提交的改動。
Git 工作流程
一般工作流程如下:
克隆 Git 資源作為工作目錄。
在克隆的資源上添加或修改文件。
如果其他人修改了,你可以更新資源。
在提交前查看修改。
提交修改。
在修改完成后,如果發(fā)現(xiàn)錯誤,可以撤回提交并再次修改并提交。
Git 的常用命令:
git clone、git remote、git fetch、git pull、git push
下圖展示了 Git 的工作流程:

Git 創(chuàng)建倉庫
git init
Git 使用?git init?命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中運行,所以?git init?是使用 Git 的第一個命令。
git init
該命令執(zhí)行完后會在當前目錄生成一個 .git 目錄。使用我們指定目錄作為Git倉庫。
git init newrepo
初始化后,會在 newrepo 目錄下會出現(xiàn)一個名為 .git 的目錄,所有 Git 需要的數(shù)據(jù)和資源都存放在這個目錄中。
$ git add? .
$ git add README
$ git commit -m '初始化項目版本'
以上命令將目錄下以 .c 結尾及 README 文件提交到倉庫中。
git clone
我們使用?git clone?從現(xiàn)有 Git 倉庫中拷貝項目(類似?svn checkout)。
克隆倉庫的命令格式為:
$ git clone “地址”
執(zhí)行該命令后,會在當前目錄下創(chuàng)建一個名為grit的目錄,其中包含一個 .git 的目錄,用于保存下載下來的所有版本記錄。
如果要自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:
$ git clone "地址"
Clone 完之后我們操作
?添加文件,添加文件包
$ git? touch? “文件名稱”, git? makdir 新建文件
新建完之后編輯
$ vi? “文件名”? ?$ : wq? 保存文件編輯
查看文件
$ ls? -a? ?查看所有文件? ?ll? 以一種怕列方式展示? git status? ?提交狀態(tài) git? diff 查看不同文件
添加文件、刪除文件
$? git? ?add ./? ?git? ?add? "文件名稱"? ?git? rm?
提交到緩存到本地文件
$ git? commit -m "說明"? ?git pull? ?git push
Git 分支管理
git branch -a? 查看遠程分支。
git? checkout (branch)? ?切換分支
git? merge? 合并分支
git? 整體流程
一般配置
git --version? //查看git的版本信息
git config --global user.name? //獲取當前登錄的用戶
git config --global user.email? //獲取當前登錄用戶的郵箱
登錄git
/* 如果剛沒有獲取到用戶配置,則只能拉取代碼,不能修改? 要是使用git,你要告訴git是誰在使用*/ git config --global user.name 'userName'? ? //設置git賬戶,userName為你的git賬號,
git config --global user.email'email'
創(chuàng)建一個文件夾
mkdir nodejs? ? //創(chuàng)建文件夾nodejs
cd nodejs? ? ? //切換到nodejs目錄下
初始化git倉庫
git init //在nodejs文件夾下初始化一個倉庫,此時文件里會到一個.git的隱藏文件夾
創(chuàng)建忽略文件
touch .gitignore? ? //不需要服務器端提交的內(nèi)容可以寫到忽略文件里
? /*
? ? ? ? .git
? ? ? .idea
? /*
查看目錄
ls -al
創(chuàng)建文件并寫入內(nèi)容
? ? //? 如果文件不存在則會創(chuàng)建文件
? ? //? 單個>箭頭表示寫入, >>表示追加
? ? echo "hello git"
? ? > index.html? ? ? //將'hello git' 寫入到index.html中? ? ? ?
查看文件內(nèi)容
cat index.html
增加到暫存區(qū)中
git add index.html
git add -A? ? ? //全部添加到緩存區(qū)
增加到版本庫(倉庫)中
git commit -m '備注時間、次數(shù)、版本號等信息'
查看版本
git log --oneline
git diff
//比較的是暫存區(qū)和歷史區(qū)的差異
git diff --cached
//比較的是歷史區(qū)和工作區(qū)的差異(修改)
git diff master
撤回內(nèi)容
//? 如果修改了工作區(qū)的文件后發(fā)現(xiàn)改錯了
//? 可以用暫存區(qū)或者版本庫里的文件替換掉工作區(qū)的文件
//? 用暫存區(qū)中的內(nèi)容或者版本庫中的內(nèi)容覆蓋掉工作區(qū)
git checkout index.html
取消增加到暫存區(qū)的內(nèi)容(添加時)
git reset HEAD index.html
//顯示目錄的狀體 有沒有添加或者修改文件
git status
刪除本地文件
rm fileName
刪除暫存區(qū)
// 保證當前工作區(qū)中沒有index.html // 使用--cached 表示只刪除緩存區(qū)中的內(nèi)容
git rm index.html --cached
回滾版本
回滾最近的一個版本 git log
git reset --hard HEAD/commit_id
回滾到未來
git reflog
創(chuàng)建分支
git branch dev
切換分支
git checkout dev
創(chuàng)建分支并切換分支
git checkout -b dev
刪除分支
git branch -d dev
在分支上提交新的版本
git commit -a -m 'dev1'
合并分支
git merge dev
分支的合并后顯示log
git log --oneline --graph --decorate
在分支開發(fā)的過程中遇到其他問題需要切換其他分支
//? 保留寫好的內(nèi)容在切換到主干
//? 保留內(nèi)容
git stash
再次切換分支后,需要應用一下保留的內(nèi)容
git stash apply
丟掉保存的內(nèi)容
git stash drop
使用并丟掉
git stash pop
最佳分支
//? 有的時候開發(fā)需要合并指定的內(nèi)容,而不是合并所有的提交
//? 所以我們需要挑選最好的,自己生產(chǎn)版本
合并分支把樹杈掰到主干上
git rebase
添加遠程的倉庫
//? push -u
//? -u參數(shù) upstream
git push origin master -u? //獲取最新代碼
連接遠程倉庫
git remote add origin 倉庫的地址
查看遠程倉庫
git remote -v
刪除遠程倉庫
git remote rm origin
如果選擇SSH協(xié)議,必須將Ubuntu的公鑰添加到GitHub上。見下一步
SSH Key
生成SSH Key:ssh-keygen –t rsa –C "你的郵箱@xx.com"
生成Key時彈出選項,回車選擇默認即可。
Key保存位置:/root/.ssh
登陸GitHub,創(chuàng)建new SSH key,其內(nèi)容為/root/.ssh/id_rsa.pub中文本
?已經(jīng)有了本地庫和遠程庫,二者實現(xiàn)同步
本地庫的改動提交到遠程庫:git push origin master
更新本地庫至遠程庫的最新改動:git pull