跟廖雪峰老师学Git
前提已安装git

git完整提交步骤--点击这里
1. [交互编程-15分钟学会github](http://try.github.io/levels/1/challenges/1)
2. [书籍-重量级教程progit](https://github.com/numbbbbb/progit-zh-pdf-epub-mobi)
3. [书籍-git magic](https://github.com/blynn/gitmagic/tree/master/zh_cn)
4. [教程-如何高效利用GitHub](http://www.yangzhiping.com/tech/github.html)
5. [教程-git immersion](http://gitimmersion.com/)
[中文版](http://igit.linuxtoy.org/contents.html)
6. [Pro Git](http://link.zhihu.com/?target=http%3A//git-scm.com/book/zh/v2)
## Git学习资源
[Githug](https://github.com/Gazler/githug): 墙裂推荐!!!
[「Githug」Git 游戏通关流程](http://www.jianshu.com/p/482b32716bbe)
[Githug通关全攻略](http://fancyoung.com/blog/githug-cheat-sheet/)
[Try Git](https://try.github.io/levels/1/challenges/1)
[Learn Git Branching](http://pcottle.github.io/learnGitBranching/)
## 参考资料
[必须要会的Git基本使用及常用命令操作](http://www.jianshu.com/p/555e7a188312)
[全面理解Git](https://zhuanlan.zhihu.com/p/24081900)
[Git常用命令总结](http://www.cnblogs.com/mengdd/p/4153773.html)
[【开源必备】常用git命令](https://zhuanlan.zhihu.com/p/25868120)
记住一句话:GIT是管理和跟踪是修改,而非是文件
1.创建版本库(仓库)
桌面创建文件夹

2.让成为Git可以管理的仓库
初始化 git init
查看初始化目录:ls -ah

3.添加文件到仓库
git add <file> 从工作区移到版本库中的stage(暂存区)
///可反复多次使用,添加多个文件;
git commit -m <message> 提交到把暂存区的所有内容提交到当前分支(特指是当前分支)
//注释

4.修改提交的文件
查看修改的状态
git status
查看仓库当前的状态,readme.txt被修改过了,但还没有准备提交的修改

4..查看对比文件修改

4.2提交修改后的文件
git add <file>
git commit -m <message>

结果:Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的
5回滚历史版本,回到某个时间的修改前的文件
在这之前看下我们提交和修改那几次哪些内容
git log
//显示从最近到最远的提交日志

5.1了解主要日志信息
git log --pretty=oneline

前面的一长串的字符是:一个SHA1计算出来的一个非常大的数字,用十六进制表示
commit id(版本号)相当于是提交历史的时间线
5.3回滚版本
5.3.1.先确定当前是那个版本号----那长串16进制 ,HEAD表示当前版本

小知识点:
- 上一个版本就是HEAD^,
- 上上一个版本就是HEAD^^
- 多个的话用以下方法
- 往上前一千个版本就是HEAD~1000
5.3.2.正式回滚
- 往上回滚一次
git reset --hard HEAD^

5.3.3.查看文件是否完成回滚
cat 文件名.后缀
- 参照对比:



关于日志信息问题
5.3.4.Git Bash Here窗口没有关闭

通过版本号回滚
git reset --hard 版本号

-
便于好理解:
image.png
5.3.5.已关闭git bash here 窗口
当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL时候,可是我TM已经找不到版本号了
git reflog 用来记录你的每一次命令

- 从上到下顺序:
最新执行动作(就是刚刚干了什么sao事情)--->从最初创建这个文件时的动作到最新的所有的命令
6工作区,暂存区
6.1工作区:

6.2暂存区:
.git隐藏目录
Git的版本库

版本库东西存N多
主要是
暂存区
默认分支master

执行操作如下:
git add 文件名
git commit -m "信息"
6.3考试要考的:

7.管理修改
7.1.过程:
- 第一次修改 -> git add 修改lxf.txt并提交到暂存区

- 第二次修改 -> git commit 修改lxf.txt文件并提交到版本库


- 第一次stastus

- 第二次status

- 查看工作区和版本库的不同

- 查看工作区和版本库里面最新版本的区别


8.撤销修改
8.1过程:
- 增加一条错误的数据

8.1.1结果:
git撤销修改可以使用 git checkout -- 文件名
使用这个命令可以让工作区的修改全部撤销
但是分为以下两种

8.1.2情况是:
回到git commit 和git add 之前的文件内容
我这边是第一种情况----回到git add 之前的状态
就是如下图:

8.2撤销操作:


所以我们git diff 就没有显示的内容
演示第二种情况----回到git commit 之前的状态




- git checkout 针对工作区
- git reset HEAD -- 文件名 针对暂存区
- git reset 既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本
8.2删除文件内容操作

8.1.1创建分支

git checkout命令加上-b参数表示创建并切换
相当以下两个命令:
git branch dev
git checkout dev
当前分支前面会标一个*号


M:修改过
D:删除了
git merge dev 合并到主分支上去

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常

git branch -d dev 删除已合并的分支

小结:

9.解决冲突
过程:
创建新分支 feature1
修改其中一条内容

master主分支:

合并出现冲突

解决冲突:

<<<<<<
当前主分支(已提交至版本库中的内容)
======
其他分支(已做修改准备提交版本库内容)
>>>>>>

之后参看日志分支

删除分支(可选)

分支管理策略
过程:
创建分支Dev 修改内容
切换至master分支



推荐使用:git merge --no-ff -m"注释" 分支名
git stash用法
引用老师的场景:
比如与你接到一个修复一个代号001的bug的任务时,很自然地,你想创建一个分支issue-001来修复它,但是,等等,当前正在dev上进行的工作还没有提交,但是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
stash相当于 把手上的工作在“藏起来”,解决问题后再继续完成手上的工作
实操:

假设dev正在工作的代码
BUG出现在master上面
操作1. 保存dev分内容

操作2.
切换分支
修复bug
将"学习分支管理策略"改成"学习解决BUG分支",并提交

切换至master分支

接着回去dev分支进行开发
查看stash内容
git stash list
恢复stash内容
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
二用git stash pop,恢复的同时把stash内容也删了

Feature分支学习

多人协作开发
1.--------查看远程连接
git remode -v
2.--------删除远程连接
$ git remote rm github
以上github 是远程仓库在本地Git中的名称
3.---------修改远程连接
git remte set-url origin URL
4.--------删除本地分支
git branch -d 本地分支名称
5.-------删除远程分支
git push --delete 链接别名 远程分支名
6.--------拉取远程分支(基于master分支,远程新建分支)
git pull 拉取全部分支
git fetch origin(连接别名) master(分支)
//从远程的origin仓库的master分支下载代码到本地的origin master
git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp
切换分支temp
1.git add . 2.git commit 注释 3.git push origin temp
还有一种git 本地给远程仓库创建分支
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。