# 學習網站html
##### 猴子都能懂的git入門git
https://backlog.com/git-tutorial/cn/intro/intro1_1.htmlgithub
修改內容的提交:數據庫
第1行:提交修改內容摘要編程
第2行:空行app
第3行:修改的理由學習
###### 工做樹和索引
數據庫--(提交)索引--(提交)工做樹網站
###### 安裝gitspa
下面連接的網頁介紹免費的SourceTree客戶端。指針
http://www.sourcetreeapp.com/
---
課程根據如下連接網站學習:
https://morvanzhou.github.io/tutorials/others/git/2-1-repository/
###### 建立版本庫(init)
在桌面上建立一個gitTUTO文件夾
在terminal 中輸入以下代碼
```
cd Desktop/gitTUTO
```
添加用戶名和郵件,這樣人和修改可以對應上
```
git config --global user.name "beijing01"
git
git config --global user.email "hongyangliu@outlook.com"
```
而後咱們就能在這個文件夾中創建 git 的管理文件了:
```
git init
```
---
添加文件管理(add)
一般咱們執行 $ ls 就能看到文件夾中的全部文件, 不過 git 建立的管理庫文件 .git 是被隱藏起來的. 因此咱們要執行這一句才能看到被隱藏的文件:
```
ls -a
```
如今咱們能用 status 來查看版本庫的狀態:
```
git status
```
如今 1.py 並無被放入版本庫中 (unstaged), 因此咱們要使用 add 把它添加進版本庫 (staged):
```
git add 1.py
```
再次查看狀態 status
```
git status
```
若是想一次性添加文件夾中全部未被添加的文件, 可使用這個:
```
git add .
```
---
提交改變(commit)
咱們已經添加好了 1.py 文件, 最後一步就是提交此次的改變, 並在 -m 自定義此次改變的信息:
```
git commit -m "creat1.py"
```
---
流程圖
---
<html border="1">
<table>
<tr>
<th>untracked</th>
<th>unmodified</th>
<th>modified</th>
<th>staged</th>
</tr>
<tr>
<td colspan = "4">->add the file-></td>
</tr>
<td></td>
<td colspan="2">->edit the file-></td>
<td></td>
<tr>
<td> <-remove the file<- </td>
<td colspan="3"></td>
</tr>
<tr>
<td></td>
<td colspan="3"><-commit<-</td>
</tr>
</table>
</html>
---
# 記錄修改
查看修改做者和日期
```
git log
```
```
vi 2.py
a = 1
```
使用查看修改還沒被提交信息
```
git status
```
因此咱們先把此次修改添加 (add) 到可被提交 (commit) 的狀態, 而後再提交 (commit) 此次的修改:
```
git add 2.py
git commit -m "change 1"
```
再次查看log,2.py和change 1這兩條修改信息,commit後的ID和做者信息也顯示出來
## 查看unstaged
若是想要查看此次還沒 add (unstaged) 的修改部分 和上個已經 commit 的文件有何不一樣, 咱們將使用 $ git diff:
```
git diff
```
## 查看staged
若是已經add了修改,文件變成了「可提交狀態」staged,能夠在diff中添加參數--cached來查看
```
git add .
git diff --cached
```
還有種方法讓咱們能夠查看 add 過 (staged) 和 沒 add (unstaged) 的修改, 好比咱們再修改一下 1.py 但不 add:
添加c=b 編程unstaged狀態
```
a=2
b=1
c=b
```
目前 a = 2 和 b = 1 已被 add, c = b 是新的修改, 還沒被 add.
```
git diff HEAD
git diff
git diff --cached
```
爲了下節內容, 咱們保持此次修改, 所有 add 變成 staged 狀態, 並 commit.
```
git add .
git commit -m "change 2"
```
---
# 回到從前
###### 修改已commit的版本
咱們將要添加另一個文件, 將這個修改也 commit 進 change 2. 因此咱們複製 1.py 這個文件, 更名爲 2.py. 並把 2.py 變成 staged, 而後使用 --amend 將此次改變合併到以前的 change 2 中.
```
git add 1.py
git commit --amend --no-edit
git log --oneline
```
###### reset回到add以前
有時咱們添加 add 了修改, 可是又後悔, 並想補充一些內容再 add. 這時, 咱們有一種方式能夠回到 add 以前. 好比在 2.py 文件中添加這一行:
```
d=3
```
而後 add 去 staged 再返回到 add 以前:
```
git add 2.py
git reset 2.py
git status -s
```
###### reset回到commit以前
每一個 commit 都有本身的 id 數字號, HEAD 是一個指針, 指引當前的狀態是在哪一個 commit. 最近的一次 commit 在最右邊, 咱們若是要回到過去, 就是讓 HEAD 回到過去並 reset 此時的 HEAD 到過去的位置.
無論咱們以前有沒有作了一些 add 工做, 這一步讓咱們回到 上一次的 commit
```
git reset --hard HEAD
#輸出
HEAD is now at 904e1ba change 2
```
查看
```
git log --oneline
```
回到change1
```
#方式1:
git reset --hard HEAD^
#方式2:
git reset --hard HEAD id
```
查看log
```
git log --oneline
```
怎麼 change 2 消失了!!! 還有辦法挽救消失的 change 2 嗎? 咱們能夠查看 $ git reflog 裏面最近作的全部 HEAD 的改動, 並選擇想要挽救的 commit id:
```
git reflog
```
重複 reset 步驟就能回到 commit (amend): change 2 (id=904e1ba)這一步了:
```
git reset --hard 904e1ba
git log --oneline
```
# 回到從前(checkout針對單個文件)
```
49df39c change2
8bb8ca2 2.py
ad046d3 first commit
```
咱們僅僅要對2.py進行回到過去操做,回到8bb8ca2 2.py這一個commit.使用
git checkout + id(8bb8ca2) + -- +1.py文件目錄
這時 1.py 文件的內容就變成了:
```
a = 1
```
咱們在 1.py 加上一行內容 # I went back to change 1 而後 add 並 commit 1.py:
```
git add 1.py
git comment -m "backe to change 1 and commit for 1.py"
git log --oneline
```
# 分支(branch)
###### 使用branch創建dev分支
咱們以前的文件當中, 僅僅只有一條 master 分支, 咱們能夠經過 --graph 來觀看分支:
```
git log --oneline --graph
```
```
git branch dev
```
###### 使用checkout建立dev分支
接着咱們創建另外一個分支 dev, 並查看全部分支:
創建分支
```
git branch dev
```
```
git branch
```
當咱們想把 HEAD 切換去 dev 分支的時候, 咱們能夠用到上次說的 checkout:
```
git checkout dev
git branch
```
*號表明還沒到dev這個分支
###### 在dev分支中修改
使用checkout -b+分支名就能直接建立和切換到新建的分支
```
git checkout -b dev
```
將dev的修改推送到master
```
git add 1.py
git commit -m "change 3"
git checkout master
```
此時查看未發現更改
切換至master才能將其餘merge歸併回來
```
git merge dev
git log --oneline --graph
```
要注意的是, 若是直接 git merge dev, git 會採用默認的 Fast forward 格式進行 merge, 這樣 merge 的此次操做不會有 commit 信息. log 中也不會有分支的圖案. 咱們能夠採起 --no-ff 這種方式保留 merge 的 commit 信息.
```
git merge --no-ff -m "keep merge info" dev
git log --oneline --graph
```
# merge分支衝突
出現狀況:不只有人在作dev的更新,還有人在作master中的bug.當咱們在merge的時候,衝突就來了。由於 git 不知道應該怎麼處理 merge 時, 在 master 和 dev 的不一樣修改.
當建立了一個分支後, 咱們同時對兩個分支都進行了修改.
好比在1.py中加上
github推送
git commit -am "change5"
---