github

# <font color=#FF0000>版本的回溯</font>
### <font color=#0099ff>仓库的创建&添加和提交仓库</font>
~~~python
mkdir repository
cd repository
git init #1
git add --all
git commit -m "write a file"#2
git status
~~~
1. 初始化
2. 然后把这个文件提交到仓库。“”里面的文字是这次提交的注释

---
### <font color=#0099ff>查看修改内容&查看提交记录&返回之前状态</font>
~~~python
git status #1
git diff#2
git add readme.txt
git commit -m "rewrite"
git log#3
git reset --hard HEAD^ #4
~~~
1. 查看当前状态，返回有没有修改或者有没有提交之类的
2. 查看修改的内容
3. 查看提交的历史记录 ``$ git log --pretty=oneline``可以把这些弄成一行看着简单一些
4. HEAD是当前状态，HEAD^是前一个状态，HEAD^^前一个的前一个状态，或者HEAD~100(前100个状态)或者用`$ git reset --hard "commit的id"` 来返回特定的状态
   - 可以利用下面语句来查看命令历史以便找到commit的id号

   ~~~python
   git reflog
   ~~~
---
### <font color=#0099ff>工作区和暂存区的理解</font>
工作区就是你这个文件夹里面的范围
暂存区就是你把修改add到的地方
master就是你提交以后文件呆的地方

---
### <font color=#0099ff>修改的撤销</font>
若你在工作区修改保存了以后可以删掉再保存，或者利用下面语句来丢弃工作区的修改
```$ git checkout -- readme.txt```

若你已经add到暂存区域的话,利用下面语句来把暂存区的修改返回到工作区，然后再利用`chenkout --` 来取消工作区的修改
```$ git reset HEAD readme.txt```


---
### <font color=#0099ff>删除文件</font>
若利用`rm`把工作区的文件删除了以后，调用`$ git status`的时候会提示你少了一个文件
若不再需要的情况下,利用下面的语句来删除掉仓库里面的文件。
```$ git rm "test.txt"```
若删错了的话，利用来下面来恢复文件区里面的这个文件
```$ git checkout -- test.txt```

---
# <font color=#FF0000>远程仓库</font>
### <font color=#0099ff>ssh key的设定</font>
github账户不是允许任何电脑都向他push仓库的，所以得让你的账户信任你的电脑，也就是说把电脑唯一的ssh key的证书上传到账户中去
- 设定方法
```$ ssh-keygen```
用这个指令产生一个sshkey存在自己的根目录下（隐藏），进去.ssh以后打开id_rsa.pub把里面的内容写进账户里
### <font color=#0099ff>添加远程库</font>
~~~python
git remote add origin 'url' #1
git remote remote origin #2
git push -u origin master
~~~
网址是自己在账户上建立的库(建立时保持和本地文件夹同名)，然后在**本地的库的目录下**利用命令1使本地的库和网上这个远程库相连。然后利用push把自己本地的内容里的全部推给origin，-u是只有第一次推送才用以后push修改的时候直接用`$ git push origin master`
+ 用命令2取消本地和远程库的关联

---
### <font color=#0099ff>从远程库克隆</font>
只会把master克隆下来，若想修改origin上其他的分支的话需要其他的命令

~~~python
git clone "网址"
git checkout -d dev origin/dev
~~~
### <font color=#0099ff>查看远程库信息&本地修改后的推给远程库</font>
~~~python
git remote
git remote -v #看更详细的信息
git push origin "master或者dev"
~~~
### <font color=#0099ff>线下多人修改origin时候的问题处理</font>
就是说一个人已经往dev上push过了一处修改，而你又对同一个地方做出了修改，然后你提交的时候就会出错
解决方法是把本地的dev和远程的origin／dev链接起来，然后把origin中的信息`pull`到本地。然后做之前的冲突解决处理

~~~python
git branch --set-upstream dev origin/dev
git pull
~~~

# <font color=#FF0000>分支管理</font>
### <font color=#0099ff>创建与合并分支</font>
~~~python
git checkout -b dev #1
git branch #2
~~~
1. 建造一个叫dev的分支并且转移到这个分支上，相当于`$ git branch dev`和`$ git checkout dev`
2. 查看所有的分支
然后在dev分支下进行修改然后commit修改
但是返回master后刚才修改的内容消失
合并两个分支：
~~~python
git merge dev
~~~
然后在dev上修改的内容就反映到master上面来了
接下来可以安心的删除dev了

~~~python
git branch -d dev
~~~

### <font color=#0099ff>解决冲突</font>
就是说建立的新的分支和master都做了修改
强制把他们俩merge在一起就会出错
用`cat 文件名`调用后，冲突文件被改成两边修改都有的文件
然后手动修改再一次提交（***在master下***）
就可以解决问题

---
### <font color=#0099ff>留下记录的合并方法</font>
因为普通的`$ git merge dev`是一种快速合并
就是说dev的球返回给master的感觉
若我们使用`--no-ff`就可以在历史记录上留下一个合并的记录（相当于两个球合成一个新的球）

~~~python
git merge --no-ff -m "说明" dev
~~~
### <font color=#0099ff>关于分支写到一半时候的保存</font>
就是说在编写dev分支的时候，接到了一个修改master bug的任务，但是dev还没有完成。为了不给其他人添麻烦先把dev的进度存起来，等master上面的bug修复结束后再回去完成dev

~~~python
git stash
~~~
存储命令，把当前工作区的内容保存起来。然后返回master做别的事情，然后回到dev的时候读取方法如下

~~~python
git stash list #查看存档的列表
git stash pop #弹出这个存档，同时删除存档
git stash apply#读取存档，但是不删除存档，有多个存档时候可以做选择读取哪个
# $ git stash apply stash@{0}
git stash drop #用来删除存档
~~~
### <font color=#0099ff>删除还没有合并的分支的方法</font>
~~~pthon
git checkout -D 文件名
~~~
## <font color=#FF0000>标签管理</font>
### <font color=#0099ff>创建标签&查看标签状态&删除标签</font>
在master上创建一个tag v1.0 这样的话默认最新的一次commit。或者后面指定id号可以特定的赋予某个状态为这个tag
然后用第3条可以看都存在哪些tag
第四条可以展示那一个tag的最具体信息

~~~python
git tag v1.0
git tag v0.9 "id号"
git tag
git tag show v1.0
git tag -d v0.9
~~~
### <font color=#0099ff>远程标签管理</font>
提交特定的标签给远程以及一次性提交所有的本地标签
删除远程的标签的方法：从本地删除后，再删除远端的

~~~python
git push origin v1.0
git push origin --tags
git tag -d v0.9
git push origin :refs/tags/v0.9
~~~