# Git
## 什么是Git?
? - Git是一款源代碼管理工具(版本控制工具)
? ? - 我們寫的代碼需要使用Git進行管理篮奄。
? - 源代碼有必要管理起嗎另绩?
? - 1.0
? - 2.0 //
? - svn,vss,vcs.... git
? - 有必要旁振,因為人工的去處理不同的版本谓罗,做相應(yīng)備份會很麻煩域那。
? - Git是linux之父當年為了維護linux---linus之前也是手動維護合并把文件發(fā)給Linus
? - linus自己寫了一個版本管理的工具(Git)
## Git安裝
## 初始化Git倉儲/(倉庫)
- 這個倉庫會存放活逆,git對我們項目代碼進行備份的文件
- 在項目目錄右鍵打開 git bash
- 命令: `git init`
## 自報家門
- 就是在git中設(shè)置當前使用的用戶是誰
- 每一次備份都會把當前備份者的信息存儲起來
- 命令:
? ? + 配置用戶名:`git config --global user.name "xiaoming"`
? ? + 配置郵箱:? `git config --global user.email "xm@sina.com"`
## 把大象放到冰箱要幾步
1. 打開冰箱門
2. 放大象
3. 關(guān)上冰箱
## 把代碼存儲到.git倉儲中
- 1.把代碼放到倉儲的門口
? ? + `git add ./readme.md` 所指定的文件放到大門口
? ? + `git add ./` 把所有的修改的文件添加到大門口
- 2.把倉儲門口的代碼放到里面的房間中去
? ? + `git commit -m "這是對這次添加的東西的說明" `
## 可以一次性把我們修改的代碼放到房間里(版本庫)
- `git commit --all -m "一些說明"`
? ? + --all 表示是把所有修改的文件提交到版本庫
## 查看當前的狀態(tài)
- 可以用來查看當前代碼有沒有被放到倉儲中去
- 命令: `git status`
## git中的忽略文件
- .gitignore,在這個文件中可以設(shè)置要被忽略的文件或者目錄铅忿。
- 被忽略的文件不會被提交倉儲里去.
- 在.gitignore中可以書寫要被忽略的文件的路徑剪决,以/開頭,
? ? 一行寫一個路徑檀训,這些路徑所對應(yīng)的文件都會被忽略柑潦,
? ? 不會被提交到倉儲中
? ? + 寫法
? ? ? ? * ` /.idea? ` 會忽略.idea文件
? ? ? ? * ` /js`? ? ? 會忽略js目錄里的所有文件
? ? ? ? * ` /js/*.js` 會忽略js目錄下所有js文件
## 查看日志
- `git log` 查看歷史提交的日志
- `git log --oneline` 可以看到簡潔版的日志
## 回退到指定的版本
- `git reset --hard Head~0`
? ? + 表示回退到上一次代碼提交時的狀態(tài)
- `git reset --hard Head~1`
? ? + 表示回退到上上次代碼提交時的狀態(tài)
- `git reset --hard [版本號]`
? ? + 可以通過版本號精確的回退到某一次提交時的狀態(tài)
- `git reflog`
? + 可以看到每一次切換版本的記錄:可以看到所有提交的版本號
## 分支
- 默認是有一個主分支master
### 創(chuàng)建分支
- `git branch dev`
? ? + 創(chuàng)建了一個dev分支
? ? + 在剛創(chuàng)建時dev分支里的東西和master分支里的東西是一樣的
### 切換分支
- `git checkout dev`
? ? + 切換到指定的分支,這里的切換到名為dev的分支
? ? `git branch` 可以查看當前有哪些分支
### 合并分支
- `git merge dev`
? ? + 合并分支內(nèi)容,把當前分支與指定的分支(dev),進行合并
? ? + 當前分支指的是`git branch`命令輸出的前面有*號的分支
- 合并時如果有沖突,需要手動去處理肢扯,處理后還需要再提交一次.
### GitHub
- https://github.com
- 不是git,只是一個網(wǎng)站
- 只不過這個網(wǎng)站提供了允許別通過git上傳代碼的功能
### 提交代碼到github(當作git服務(wù)器來用)
- `git push [地址] master`
+ 示例: `git push https://github.com/huoqishi/test112.git master? master`
+ 會把當前分支的內(nèi)容上傳到遠程的master分支上
- `git pull [地址] master`
+ 示例: `git pull https://github.com/huoqishi/test112.git master`
+ 會把遠程分支的數(shù)據(jù)得到:(*注意本地-要初始一個倉儲!*)
- `git clone [地址]`
+ 會得到遠程倉儲相同的數(shù)據(jù),如果多次執(zhí)行會覆蓋本地內(nèi)容妒茬。
# 流行框架
## ssh方式上傳代碼
- 公鑰 私鑰,兩者之間是有關(guān)聯(lián)的。
- 生成公鑰,和私鑰
? ? + `ssh-keygen -t rsa -C "xiaoming@sina.com"`
## 在push和pull操作進
- 先pull , 再push
- 當我們在push時蔚晨,加上-u參數(shù)乍钻,那么在下一次push時
? 我們只需要寫上`git push`就能上傳我們的代碼。(加上-u之后铭腕,git會把
? 當前分支與遠程的指定的分支進行關(guān)聯(lián)银择。git push origin master)
?git常用命令
? mkdir:? ? ? ? XX (創(chuàng)建一個空目錄 XX指目錄名)
? pwd:? ? ? ? ? 顯示當前目錄的路徑。
? git init? ? ? ? ? 把當前的目錄變成可以管理的git倉庫累舷,生成隱藏.git文件浩考。
? git add XX? ? ? 把xx文件添加到暫存區(qū)去。
? git commit –m “XX”? 提交文件 –m 后面的是注釋被盈。
? git status? ? ? ? 查看倉庫狀態(tài)
? git diff? XX? ? ? 查看XX文件修改了那些內(nèi)容
? git log? ? ? ? ? 查看歷史記錄
? git reset? –hard HEAD^ 或者 git reset? –hard HEAD~ 回退到上一個版本
? ? ? ? ? ? ? ? ? ? ? ? (如果想回退到100個版本析孽,使用git reset –hard HEAD~100 )
? cat XX? ? ? ? 查看XX文件內(nèi)容
? git reflog? ? ? 查看歷史記錄的版本號id
? git checkout — XX? 把XX文件在工作區(qū)的修改全部撤銷搭伤。
? git rm XX? ? ? ? ? 刪除XX文件
? git remote add origin https://github.com/ev-power/XiaoYong 關(guān)聯(lián)一個遠程庫
? git push –u(第一次要用-u 以后不需要) origin master 把當前master分支推送到遠程庫
? git clone https://github.com/ev-power/XiaoYong? 從遠程庫中克隆
? git checkout –b dev? 創(chuàng)建dev分支 并切換到dev分支上
? git branch? 查看當前所有的分支
? git checkout master 切換回master分支
? git merge dev? ? 在當前的分支上合并dev分支
? git branch –d dev 刪除dev分支
? git branch name? 創(chuàng)建分支
? git stash 把當前的工作隱藏起來 等以后恢復(fù)現(xiàn)場后繼續(xù)工作
? git stash list 查看所有被隱藏的文件列表
? git stash apply 恢復(fù)被隱藏的文件,但是內(nèi)容不刪除
? git stash drop 刪除文件
? git stash pop 恢復(fù)文件的同時 也刪除文件
? git remote 查看遠程庫的信息
? git remote –v 查看遠程庫的詳細信息
? git push origin master? Git會把master分支推送到遠程庫對應(yīng)的遠程分支上? ?