GIT版本管理

# 學習網站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"

 

---

相關文章
相關標籤/搜索