# Git安裝
## Linux
`sudo apt-get install git`命令安裝Git
## Windows
[官網下載](https://git-for-windows.github.io/)?安裝即可,不贅述。
注:安裝時注意一步:選擇第二項,將git添加到path中。
# 創建版本庫
1. 創建項目文件夾,例如:demo
2. 進入demo目錄下:`git init`命令將這個目錄變成git可以管理的倉庫(repository)。將倉庫建好后,倉庫目錄下會多了一個.git隱藏文件夾。可以用`ls -ah`查看隱藏文件。
3. 向庫里添加一個`readme.txt`文件:
4. `git add`告訴git,要把文件添加到倉庫:
~~~
git add readme.txt
~~~
執行命令,其實,這一步的作用就是將文件添加到stage(暫存區)。
* `git add .`將所有文件添加到暫存區。
* `git add -u`將所有文件添加暫存區,同時,將刪除的文件從倉庫中刪除。
5. `git commit`命令,將文件提交到倉庫。
~~~
git commit -m "wrote a readme file"
~~~
注:`-m`是對本次提交的說明,不該偷懶省去。
6. `git status`查看當前版本庫的狀態。
7. `git diff`顯示具體的尚未緩存的改動記錄。
8. `git log`記錄每次`commit`的信息。`git log --pretty=oneline`將每次`commit`的記錄打印成一行,內容精簡。
9. `git reset`修改命令:
* `git reset HEAD`廢除這次修改記錄,當前文件回到上一次提交的狀態。
* `git reset --hard [commit id]
10.?`git rm`慎用。這個命令會將所有版本庫記錄刪除。
# 遠程倉庫
創建SSH Key。在類似`C:\Users\xiang_000\.ssh`這樣的主目錄下,查看是否有`id_rsa`和`id_rsa.pub`文件。如果有了,直接可以將公鑰添加到github賬戶上。如果沒有,打開Shell(windows下的Git Bash):
~~~
ssh-keygen -t rsa -C "youremail@example.com"
~~~
`id_rsa.pub`是公鑰,可以放心的告訴任何人。
在github的Account settings里,Add SSH Key。
## 從遠程庫克隆
如果從零開發,推薦的方式是先在github上創建遠程倉庫。然后,從遠程庫克隆。
在github創建名為:`learngit`的新倉庫。勾選添加`README.md`。
`git clone`克隆一個本地庫:
~~~
git clone git@github.com:michael728/learngit.git
~~~
## 添加(關聯)遠程庫
建完本地庫,又想在github創建一個git倉庫,讓兩個倉庫進行遠程同步。
在github創建新的repo,名字為:demo
根據github的提示,在本地的`demo`倉庫下運行命令:
~~~
git remote add origin git@github.com:michae728/demo.git`
~~~
* 請千萬注意,把上面的`michae728`替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠程庫,關聯沒有問題,但是你以后推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。
* 添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。
將本地庫的所有內容推送到遠程庫上:
~~~
git push -u origin master
~~~
把當前分支`master`推送到遠程。由于之前遠程庫是空的,第一次推送`master`分支時,加上了`-u`參數。git不但把本地的`master`分支內容推送到遠程新的`master`分支,還會把本地`master`分支和遠程的`master`分支關聯起來,以后推送或者拉取就可以簡化命令。
從現在起,本地提交,可通過命令:
~~~
git push origin master
~~~
# 分享與更新項目
## `git push`:
* `git push origin dev`表示提交到遠程的dev分支。
* 通常在本地的dev分支推送到遠程的dev分支,注意兩地分支命名要相同,保證不發生混亂
## `git pull`:
* `git pull origin dev`表示拉遠程dev分支到本地,并和本地dev分支合并
`git fetch`(不常用):
* `git fetch origin dev`表示拉遠程dev分支到本地,但是,不和本地dev分支合并
## `git remote`:
* `git remote add github git@github.com:michael728/test.git`將本地倉庫推送到github上名為test的倉庫里
# 分支管理
## 創建于合并分支
創建`dev`分支,然后切換到`dev`分支:
~~~
git checkout -b dev
~~~
相當于下面兩條命令:
~~~
git branch devgit checkout dev
~~~
`git branch`命令用于查看當前分支。當前分支前面會有`*`:
* `git branch`查看本地分支
* `git branch -a`查看本地和遠程所有分支
* `git branch -r`查看遠程分支
* `git branch -d`刪除本地分支
* `git push :origin dev`刪除遠程`dev`分支
* `git checkout master`命令用于`dev`分支完成工作后,切換回`master`分支。
`git merge`用于本地的指令。如果當前分支是master,本地另一個分支是`dev`,用下面命令將分支合并到master:
~~~
git merge dev
~~~
# 后悔藥
## 版本回退
`git log`來查詢歷史記錄。`git log --pretty=oneline`顯示精簡信息。
git中,`HEAD`表示當前版本,上一個版本就是`HEAD^`,上上個版本`HEAD^^`,上100個版本,寫成`HEAD~100`。
回到上一個版本:
~~~
git reset --hard HEAD^
~~~
或者通過`git reset --hard [commit id]`回到指定版本號的版本。
git版本的回退速度很快,因為git內部有個指向當前版本的`HEAD`指針。git僅僅是通過修改`HEAD`指向就可以完成版本切換的工作。
`git reflog`用來查看命令歷史。通過這個,就可以查到之前的版本號啦!
## 工作區和暫存區
工作區(Working Directory)
例如我們創建的`demo`文件夾,他就是一個工作區。
版本庫(Repository)
工作區有一個隱藏目錄`.git`,這個不算工作區,它是git的版本庫。
git的版本庫里存了很多東西,最重要的是稱為`stage`的暫存區,還有git為我們自動創建的第一個分支`master`,以及指向`master`的一個指針叫`HEAD`。
說明:
* `git add`實際上就是把文件修改添加到暫存區;
* `git commit`提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因為我們創建愛你git版本庫是,git自動為我們創建了唯一一個`master`分支,所以,現在`git commit?`就是往`master`分支上提交更改。(因為以后還有可能往分支上提交啊!)
~~~
? ?+ `git status`可以查看狀態。如果有文件從來沒有被添加過,那么它的狀態是:`Untracked`。 ? ?+ 提交成功后,如果沒有對工作區做任何修改,那么工作區就是`working directory clean`
~~~
## 管理修改
1. `git diff HEAD -- README.md`?命令查看工作區和版本庫里最新版本的區別。
## 撤銷修改
分為兩種情況的修改:
修改了工作區某個文件的內容,想直接丟棄修改:
~~~
git checkout -- filename
~~~
注:`--`前后都有空格。
當修改了工作區內容,同時,添加到了暫存區,分兩步:
* 用命令`git reset HEAD filename`,回到場景1
* 用場景1的方法操作。
## 刪除文件
當刪除了工作區的文件,git知道刪除了文件,因此,工作區和版本庫就不一致。`git status`命令會立刻告訴那些文件被刪除了。有兩個選擇:
1. 確實要從版本庫里刪除該文件,用命令`git rm fimename`,之后`git commit`提交。
2. 誤刪,因為版本庫里還有,可以很輕松的把誤刪的文件恢復到最新版:`git checkout -- filename`
注:`git checkout`其實是用版本庫里的東西替換工作區的版本。無論工作區是修改還是刪除,都可以一鍵還原。
- PHP學習
- PHP應用
- PHP函數總結整理
- 39個對初學者非常有用的PHP技巧
- 深入淺出之Smarty模板引擎工作機制
- 數組操作
- file操作的常用方法
- PHP字符串輸出之Heredoc說明
- require(_once)和include(_once)的理解
- PHP提高效率的幾點
- php無限遍歷目錄
- 53個要點提高PHP編程效率
- THINKPHP
- THINKPHP 常見的問題
- 微信
- 微信公眾號接口
- 微信小程序開發資料收集
- 微信小程序開發:MINA
- 通過微信小程序看前端
- 微信小程序開發初體驗
- 微信小程序 Demo(豆瓣電影)
- API應用
- 支付寶
- 二維碼轉換
- 前端開發
- HTML5
- CSS
- 七種css方式讓一個容器水平垂直居中
- JavaScript
- JavaScript奇技淫巧44招
- JavaScript筆記
- 后端開發
- Node
- SQL數據庫
- 服務維護
- git使用
- Git入門私房菜
- MAC終端維護
- VIM命令大全
- 開發規范
- 智能手機屏幕的秘密
- 超實用六步透視網易設計規范(附完整PDF下載)
- UI設計常用字體規范
- APP界面切圖命名和文件整理規范
- 網頁UI視覺設計規范
- ios視覺設計規范說明
- 開發APP時需要注意的原則
- 移動端APP設計初步入門
- Axure
- 基礎操作
- 基礎1-10
- 基礎11-20
- 基礎21-30
- 基礎31-40
- 基礎41-50
- 基礎51-60
- Sketch
- 軟件使用
- sublime3_用戶設置
- sublime下如何修改自動補全 后lang=zh-cn?
- 運營理念
- 新人指導心得體會
- 從一次活動設計,聊聊交互設計師的3個階段
- 詳情頁優化那些不得不說的細節
- 店鋪裝修淺析
- 淘寶店鋪裝修之寶貝詳情頁的布局教程
- 寶貝詳情頁 客戶需求調研及總結
- 寶貝描述樣板房