一、Git概述
1.定義
git是分布式版本控制系統(tǒng)
2.git與svn的比較
版本庫:版本庫(倉庫)可以簡單理解成一個(gè)目錄(文件夾)
1)svn是集中式版本控制系統(tǒng),版本庫放在中央服務(wù)上,工作的流程如下:
構(gòu)建前——從中央服務(wù)器拉取最新的版本庫
構(gòu)建中——在各自的電腦上構(gòu)建項(xiàng)目
構(gòu)建后——將自己的版本庫推送到中央服務(wù)器
2)git是分布式版本控制系統(tǒng),沒有中央服務(wù)器,工作流程如下:
構(gòu)建前——拉取別人的最新對(duì)版本庫的修改
構(gòu)建中——在各自的電腦上構(gòu)建項(xiàng)目
構(gòu)建后——將自己的修改推送給別人
3)git和svn的區(qū)別
svn需要聯(lián)網(wǎng),git不需要聯(lián)網(wǎng),svn有中央服務(wù)器,git每個(gè)人的電腦都相當(dāng)于中央服務(wù)器
2.Git的使用
1)詳細(xì)教程請(qǐng)移步到 ? ?轉(zhuǎn)自廖雪峰的一篇文檔,很好很強(qiáng)大
2)安裝步驟
2.安裝完成后,在開始菜單中找到“Git”->"Git Bash"

在命令行中輸入一下命令 完成配置
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
3) 創(chuàng)建版本庫
1.常用命令
$ git init ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 初始化Git倉庫
$ git add <file> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?添加文件,可重復(fù)多次操作
$ git commit -m '<說明文字>' ? ? ? ? ? ? 提交,完成
$ git status ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 查看Git倉庫的狀態(tài)
$ git diff ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?查看修改的內(nèi)容
$ git log ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?提交歷史 ?后面可以加上 --pretty==oneline 簡化git顯示
$ git reset --hard HEAD^ ? ? ? ? ? ? ? ? ? ?回滾上一個(gè)版本
$ git reset --hard HEAD^^ ? ? ? ? ? ? ? ? ?回滾上上一個(gè)版本
$ git reset --hard HEAD~100 ? ? ? ? ? ? ?回滾往上100個(gè)版本
$ git reset --hard ?<commit Id(就是那長串的字符串)> 回滾到指定版本,可用于找回回滾之前的版本 版本號(hào)沒有必要寫全
$ git reflog ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?命令歷史,可用查找你建立所有倉庫版(包括刪除 回滾)的版本號(hào)
$ clear? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 清空 Git Bash上 歷史記錄
$ git check --readme.txt ? ? ? ? ? ? ? ? ? ?讓文件回到最近一次 git commit 或 git add時(shí)的狀態(tài)
$ git rm <file> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 刪除文件
$ rm <file> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 刪除文件
4)工作區(qū)和暫存區(qū)
每次修改 如果不 git add 加入到緩存區(qū) 那么git commit?
5)遠(yuǎn)程倉庫
1.步驟
1)創(chuàng)建 SSH Key
跳轉(zhuǎn)到用戶主目錄下,例如 c盤
<1>查看是否已經(jīng)有了ssh秘鑰
$ cd ~/.ssh
<2>生成秘鑰
$ ssh-keygen -t rsa -c "example@emial.com"
<3>最后得到兩個(gè)文件?
id_rsa ? ? ? ? ? ? ? ? ? 私鑰(不能泄露)
id_rsa.pub ? ? ? ? ? 公鑰(可以告訴任何人)
2)登陸GitHub, 在 setting中找到 SSH 相關(guān)的選項(xiàng)中(具體的要看Github網(wǎng)站的更新情況,)?
,add SSh key,Title隨意,Key文本框中填寫上 id_rsa.pub文件里的內(nèi)容,如下圖

3)添加遠(yuǎn)程庫
<1> 登陸GitHub, 找到 new repository(創(chuàng)建存儲(chǔ)庫),如下圖

如果進(jìn)展順利的話,應(yīng)該會(huì)出現(xiàn)

<2>本地Git庫關(guān)聯(lián)遠(yuǎn)程庫相關(guān)聯(lián)
$ git remote add origin git@github.com:CreateEngine/learngit.git
<3>然后,以后只要本地做了提交,就可以把本地master分支的最新修改推送至 GitHub,命令如下
$ git push origin master
<4> 遠(yuǎn)程庫 關(guān)聯(lián)本地Git庫
$ git clone git@github.com:CreateEngine/learngit.git
4)分支管理
<1> 概述
類似于平行宇宙,多人協(xié)作,分別不同的分支上開發(fā),想提交就提交,直到開發(fā)完畢后,再一次性合并到原來的分支上,這樣,既安全又不影響別人工作。
<2>創(chuàng)建與合并分支
$ git branch dev ? ? ? ? ? ? ? ? ? ? ? 創(chuàng)建dev分支
$ git checkout dev ? ? ? ? ? ? ? ? ? ?切換到dev分支
$ git checkout -b dev ? ? ? ? ? ? ? ?創(chuàng)建dev分支并切換到dev分支
$ git branch ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?查看當(dāng)前分支
$ git merge shifeng ? ? ? ? ? ? ? ? ? 將 shifeng分支合并到當(dāng)前分支上?
$ git branch -d shifeng ? ? ? ? ? ? ?刪除shifeng分支
<3> 解決沖突
先解決沖突文件,然后 git add git commit即可
$ git log --graph ? ? ? 查看分支合并圖
$ git log --graph?--pretty=oneline --abbrev-commit
<3>分支管理策略
$ git merge --no-ff -m "merge with no-ff" dev ? ? ?使用 --no-ff參數(shù),表示禁用 Fast forward
<4> Bug 分支
$ git stash ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?把當(dāng)前工作現(xiàn)場“儲(chǔ)藏”起來
$ git stash list ? ? ? ? ? ? ? ? ? ? ? ?查看儲(chǔ)藏的工作區(qū)
$ git stash apply ? ? ? ? ? ? ? ? ? ?恢復(fù)儲(chǔ)藏區(qū),恢復(fù)后,stash內(nèi)容不刪除
$ git stash drop ? ? ? ? ? ? ? ? ? ? ?刪除恢復(fù)后的stash內(nèi)容
$ git stash pop ? ? ? ?? ? ? ? ? ? ? ? 恢復(fù)的同時(shí)把stash內(nèi)容也刪除?
$ git stash apply stash@{0} ?恢復(fù)指定的stash(先使用 git stash list 命令查看 stash 列表)
<5>Feature 分支
$ git branch -d feature-vulcan ? ? ?刪除分支
<6> 多人協(xié)作
$ git remote ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?查看遠(yuǎn)程庫的信息
$ git remote -v ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?顯示更詳細(xì)點(diǎn)的信息
<7> 常見問題
1) 本地庫添加遠(yuǎn)程庫
$ git push -u origin master (第一個(gè)推送 -u 關(guān)聯(lián)本地庫和遠(yuǎn)程庫)
如果出現(xiàn) 類似如下的錯(cuò)誤提示
To git@git.coding.net:creatEngine/react-sf.git
! [rejected]? ? ? ? master -> master (non-fast-forward)
error: failed to push some refs to 'git@git.coding.net:creatEngine/react-sf.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
可能是以為遠(yuǎn)程庫有東西沒有拉取到本地(如果 readme.txt文件)使用如下命令進(jìn)行代碼合并
$ git pull --rebase origin master