1、下载git
2、安装git
3、因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识
git config --global user.name 'xgl'
git config --global user.email 'xgl@qq.com'


4、创建仓库
mkdir sleep
git init
5、添加文件
第一步:使用命令 git add readme.txt添加到暂存区里面去
git add readme.txt
git add * :添加所有文件
第二步:用命令 git commit告诉Git,把文件提交到仓库。
git commit -m "第一次提交
通过命令git status来查看是否还有文件未提交"

6、删除文件
rm 1.php 删除工作区的文件
git rm 1.php 删除git分支中的文件,还得使用git commit提交

7、版本回退
git log:查看版本提交日志
git log --pretty=oneline
git reset --hard HEAD  回退到上一个版本
git reset --hard 123213 回退到指定版本

8、工作区 暂存区  分支区的对比
通过三个命令理解

      下面还有一个需要注意的git diff 命令的差异:

  git diff 比较的是工作区和暂存区的差别
  git diff --cached 比较的是暂存区和版本库的差别
  git diff HEAD 可以查看工作区和版本库的差别

9、撤销修改
情况1:数据只存在工作区
git checkout -- readme.txt  丢弃工作区的修改内容
情况2:数据添加到了暂存区
先从版本中把暂存区清空,在使用情况1
git reset HEAD readme.txt
情况3:数据已经提交到暂存区 并commit到分支
可以直接使用版本回退

10:分支相关
git checkout -b dev  创建并切换到dev分支
git branch:查看所有分支,并且 当前分支会有*
git checkout mast:切换分支
git branch -d dev:删除分支,不能在当前分支删除当前分支
git merge dev,把dev合并到当前分支中,注意 如果有冲突,会产生一个 master|merging的临时分支,我们需要在这个临时分支中解决冲突后 然后在临时分支上执行:git add,git commit 后 会自动合并切换到当前分支
11、bug分支
使用场景:首先从master 新建一个dev分支,我们在dev分支上面开发,但是功能还没有开发完成,突然在生产环境发现一个重大bug,需要马上解决,如果我们这个时候直接切换到主分支修改,会把我们在dev分支上修改的 还没有提交的 带过去,这是在创建bug分支 也会带过去,
处理办法是:我们现在dev分支上使用 git stash,把在当前dev分支上的修改 打包存储起来,保证我们切换到master时不会带过去,然后在切换到master分支,在使用git checkout -b mastr-bug的临时分支 在在bug分支
上修改 提交 和并到master分支,在处理完bug后,在切换到dev分支 使用git stash pop,解包 在继续开发
12、github远程仓库
    一、创建ssh key
      ssh-keygen -t rsa -C "350833806@qq.com"
     把公钥保存到远程仓库网站上面
   二、添加远程仓库
   
      把本地仓库和远程仓库关联:git remote add origin https://github.com/350833806/newwind.git
     把本地mster仓库内容推送到远程仓库:git push -u origin master
    把本地dev仓库内容推送到远程仓库:git push -u origin dev
    把本地分支提交到远程分支对应得魔法分支上去:git push origin head:refs/for/develop
   三、克隆远程仓库到本地
    克隆远程仓库到本地:git clone git@github.com:350833806/newwind.git
   注意:clone在克隆的时候默认是把当前仓库的所有分支都克隆下来
    本地新建分支 并关联远程分支
    git checkout -b dev origin/dev
      

13、多人操作分支
git remote -v   查看远程库的信息,可以知道是否有获取和推送到远程库的 权限

git pull:拉取跟新

14、eclipse整合git
配置用户user 默认读取用户目录下的.gitconfig
配置并生成公钥 默认读取用户目录下面的 .ssh
在gitee上面创建空的仓库
分享项目,ji

----------------------------------
自定义版本git服务器

1、新增加git用户
user add git
passwd git 123456
2、在/etc/.ssh/sshd_config查看ssh授权文件位置

3、在git用户的家目录下的.ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

4、在git clone拉取代码的时候 就可以不用 密码来拉取了,如果没有设置 就需要使用git用户的密码来拉取

--------------------------
jenkins 默认用户使用的jenkins 导致git拉取代码失败


图灵学院
======================
git init sleep:创建一个sleep的仓库
git status:查看文件状态
git add .:把文件加入到暂存取 local cache     
git add -A:添加全部文件到暂存区
git add . 提交所有文件到暂存区   git add 1.txt 只提交1.txt到暂存区
git rm --cached 2.txt -r:把2.txt从暂存区删除

git commit :把暂存区的所有文件 提交到本地仓库
git commit 1.txt :只把暂存区的 1.txt 提交到本地仓库

git remote add origin https://gitee.com/201505131330/sleep.git  本地仓库 关联远程仓库,可以关联多个远程仓库  ,注意其中 origin是名称
git remote add origin2 git@gitee.com:201505131330/sleep2.git  本地仓库 关联远程仓库,可以关联多个远程仓库  ,注意其中 origin是名称
git remote:查看远程仓库
git remote remove origin :删除和远程仓库关联

git clone https://gitee.com/201505131330/sleep.git sleep1 :克隆远程仓库到本地 并命名为sleep1

git push origin:推送到远程仓库 origin


git branch :查看仓库中所有本地分支:
git branch -a:查看所有分支(包括本地+远程)
git branch -av:查看所有分支的详细信息(包括本地+远程))
git branch -avv:查看所有分支的详细信息(包括本地+远程)) 和本地远程的关联信息

git checkout master:切换到master分支
创建分支方式:
1、基于当前分支创建新分支
git branch  新分支名称
2、基于远程分支创建新分支
3、基于一个提交创建新分支
4、基于tag创建新分支

删除分支:
git branch -d  分支名称:


tag 管理:tag是只读的

git tag:查看所有tag
git tag tag名称 分支名称:基于一个分支创建tag

日志:
git log:查看当前分支所有日志提交
git log --oneline:查看当前分支 一行的形式查看日志
git log master:查看master分支的日志提交
git log master..dev 查看dev有哪些提交没有到master
git log dev..master 查看master有哪些提交没有到dev
git log --pretty=format:'%h %s' --graph:以图的方式查看提交
合并分支:
git merge master,把master分支合并到当前分支


git show:查看当前分支 最后一次提交的内容
git show master:查看master分支最后一次提交的内容




===================
服务的搭建
一、local协议
演示:在d盘创建一个gitdemo的文件
创建一个裸项目 名称为 gitdemo.git, git init --bare gitdemo.git
然后共享 d:gitdemo目录
客户端克隆仓库:git clone /d/gitdemo/gitdemo.git

二、ssh协议
演示
创建一个裸仓库
git init --bare mysleep.git
克隆仓库
git clone root@152.32.226.250:/demogit/mysleep.git

---------------------
工作中遇到问题一:
合并代码后 拉下来后和远程分支代码不一致,采用git强行覆盖本地分支,让远程分支和本地分支一致
git强制覆盖:
    git fetch --all
    git reset --hard origin/master
    git pull

===版本回滚
https://www.knowledgedict.com/tutorial/git-rollback.html
git log --oneline
第一步:本地回退
本地回退到置顶版本:git reset --hard <commit_id>
本地回退到上一个版本:git reset --hard HEAD^                           注意HEAD表示当前版本 HEAD^表示上一个版本
第二步:将本地回滚的代码推送到远程仓库
git push -f