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"

 

---

相关文章
相关标签/搜索