一、Git是什么?
git是一个版本控制软件
张开的故事:
小张是一个很有野心的程序员,经过万般努力终于开发出了1个视频网站,并上线;
由于网站很火,又要开发新的功能,在开发功能的时候可能会出,就需要把目前的网站代码保留下来留条退路。
如何保存呢?打包压缩?
缺点:数据量越积压越多
于是小张选择了Git做版本控制
1、进入程序目录下
2、右击Git Bash Here,进入git终端(Linux中的命令都支持)
二、git基本使用
1、git init 命令 创建一个.git的隐藏文件夹(存储git发布的版本)
2、$ git status 查看当前文件的状态(红色 初始状态)
2、git add . 把当前目录中所有文件从工作区添加的暂存区 ; 状态改变变成绿色
3、git commit -m '第一次上线' 从暂存区添加到分支生产一个版本;保存在.get目录中;
若第一次使用Git会出现以上报错,请在全局声明邮箱和用户
4、Git把管理的文件分为了2个区(工作区、版本库)4种状态(原内容、修改过的内容、暂存、分支)。
4.1、其中原内容---------》修改过会被自动检测到,把修改过的内容--------》提交到暂存状态使用git add .-------》提交到分支使用git commit -m '版本描述信息' (生成1个版本)
4.2、使用 git status 查看当前文件的状态 如果原文件已经修改 状态为红色,暂存状态为绿色。
4.3、git log 查看当前版本之前的版本 、git reflog 查看所有版本
5、git add * 把所有工作区中修改过的内容 提交到暂存区,注意但不生成版本!
6、git log 查看版本信息
7、git reset --hard 14555da1d4d31af4875d210c5605bcd729726eaa(版本唯一标识) 回滚到原版本
版本回滚
上回说的小张要开发新的功能 非洲专区,假设此时原来程序出BUG了
所以需要把新功能非洲专区暂存到一个位置, 然后再去修改日韩专区、欧美专区的BUG
8、git stash 把新增的内容保存到一个位置,自动迁移了非洲专区
小张修改了第一次上线版本的BUG, 该日韩专区为中日韩专区
第1版本修改完BUG,提交无BUG版本
$ git add . [email protected]-20170811HMNW MINGW64 /d/test09 (master) $ git commit -m '第1版本BUG修复完毕'
[master cdcb19d] 第1版本BUG修复完毕 3 files changed, 85 insertions(+), 10 deletions(-) create mode 100644 .idea/vcs.xml
这时怎么把非洲专区拿回来呢?
9、git stash pop
把新版本和 拿去的功能(非洲专区)进行完美合并 这就是Git厉害之处
10、如果在git stash 期间, 多次修该一处代码并提交了版本,git stash pop就会出现冲突()
因为git stash pop不知道和哪个版本进行合并
补充:
git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作
区还原到当前版本未修改过的状态
git stash list 查看“某个地方”存储的所有记录
git stash clear 清空“某个地方”
git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
git stash drop 编号,删除指定编号的记录
三、分支
Git默认分支为master,也可以设置多个分支,开发工作中为了避免线上代码受到影响、也能保证版本功能升级一般 设置会2条分支
master分支:放线上版本代码;
dev分支:复制一份线上代码 ,放在dev分支以便开发出带有新功能的版本 ;开发完成后合并为稳定版本2;
1、创建分支 git branch 分支名称 ; git branch 查看已有分支
[email protected] MINGW64 /d/Git_test (master) $ git add . [email protected]-20170811HMNW MINGW64 /d/Git_test (master) $ git commit -m '开始分支学习' [master 1ad25a2] 开始分支学习 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 readme.txt [email protected]-20170811HMNW MINGW64 /d/Git_test (master) $ git status On branch master nothing to commit, working tree clean [email protected]-20170811HMNW MINGW64 /d/Git_test (master) $ git branch dev [email protected]-20170811HMNW MINGW64 /d/Git_test (master) $ git branch dev * master [email protected]-20170811HMNW MINGW64 /d/Git_test (master) $
2、分支切换 git checkout 分支名称 (注意由于 dev 分支是由master分支创建的,所以dev分支代码和master是一致的)
$ git checkout dev Switched to branch 'dev'
补充:
切换分之前一定要确保 工作区域是没有被修改过的内容。否则会报错,解决:git stash git stash clear
$ git checkout master error: Your local changes to the following files would be overwritten by checkout: .idea/workspace.xml Please commit your changes or stash them before you switch branches. Aborting
3、分支合并 git merge dev 分支名称
在dev分支开发完毕,测试通过之后,进入master分区,进行分区合并
div分支的版本也已经合并到master分支
四、GitHub
我们在公司做完开发,如果在家或者出差也要继续工作怎么办?可以结合GitHub,GitHub类似一个网盘,帮我们托管维护代码;
1、创建一个仓库
2、在本地创建项目
[email protected] MINGW64 /d/s5day83 (master) $ git add . [email protected]-20170811HMNW MINGW64 /d/s5day83 (master) $ git commit -m '初次提交' [master (root-commit) d650438] 初次提交 1 file changed, 1 insertion(+) create mode 100644 readme.txt [email protected]-20170811HMNW MINGW64 /d/s5day83 (master)
$ git remote add origin https://github.com/zhanggen3714/s5day83.git [email protected]-20170811HMNW MINGW64 /d/s5day83 (master) $ git push -u origin master Username for 'https://github.com': zhanggen3714 Counting objects: 3, done. Writing objects: 100% (3/3), 243 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/zhanggen3714/s5day83.git * [new branch] master -> master Branch master set up to track remote branch master from origin. [email protected]-20170811HMNW MINGW64 /d/s5day83 (master) $
3、拉GitHub中的项目 git clone https://github.com/zhanggen3714/s5day83
4、在GitHub上把项目克隆到本地之后,修改完毕怎么再次提交到GitHub呢?
查看别名: vim .git/config
git push origin master 提交本地版本到GitHub
5、git pull origin master 从GitHub拉取代码到工作区(和克隆区别,拉更改部分)
总结:
公司:
1、创建远程仓库
2、写readme
3、git add .
4、git commit -m ' 在公司写得代码'
5、git push origin mastet(提交代码到GitHub)
回家:
回家之后假设没有带电脑回家
1、git clone https://github.com/zhanggen3714/s5day83(把在公司开发的代码克隆到家里这电脑上)
2、git add .
3、git commit '在家开发的代码'
4、git push origin mastet(把在家写得的代码提交到GitHub)
第二天回到公司:
1、git pull origin master (把在家写得,拉下来)
状况1:如果到公司没有先 pull 在家写得代码,而是修改了一番,在pull就会出现冲突;
解决:解决冲突,再次提交新版本到GitHub;
补充:
git pull 是一步从远程拉代码到工作区
也可以通过一下2个步骤
git fetch origin 分支 从远程拉到分支
git merge origin master (合并分支到master) = git rebase origin/master
四、协同开发
1、合作者模式: 将用户添加到仓库合作者之后,该用户就可以向 test 仓库里面上传自己的代码了。
2、组织:创建一个组织,把添加用户,一起做项目。
2.1 创建组织
2.2 邀请其它用户加入
3、如果你在GitHub上看到一个很牛逼代码有BUG,怎么给别人修正呢?大喊一声 fork,不是fuck。
3.1、搜素到该项目
3.2 fuck一下它
3.3 提交你的 修复方案
BUG修复说明
提交
以上操作 之后 该用户就会接收到你的 pull request;
五、git的配置
1. 配置文件
Git的配置文件有三个:
- 系统配置: /private/etc/gitconfig
- 用户配置: ~/.gitconfig
- 项目配置:.git/config
2. ssh 无密码连接远程仓库
1、生成一对秘钥


$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Administrator.PC-20170811HMNW/.ssh/id_rsa): /c/Users/Administrator.PC-20170811HMNW/.ssh/id_rsa already exists. Overwrite (y/n)? [email protected]-20170811HMNW MINGW64 /d/在公司 (master) $ cd ~/.ssh/ [email protected]-20170811HMNW MINGW64 ~/.ssh $ ls id_rsa id_rsa.pub [email protected]-20170811HMNW MINGW64 ~/.ssh $ cp id_rsa.pub /d/在公司 [email protected]-20170811HMNW MINGW64 ~/.ssh $ cd /d/在公司
2、把公钥copy到GitHub
3、配置忽略的文件
$ vim .gitignore
添加要忽略的文件
参考链接:银角大王 http://www.cnblogs.com/wupeiqi/p/7295372.html