# 学习网站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"
---