Git的使用


 Git是什么?


   Git是一个分布式版本控制系统,能够有效,高速的处理项目版本管理,GitHub是一个基于Git远程文件托管平台

 配置:绑定到GitHub上

  • 配置用户名:git config --global user.name "GitHub的用户名"
  • 配置邮箱:git config --global user.email "GitHub的注册邮箱"

 版本库


   版本库,或者叫仓库,可以理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每一个文件的修改,删除,Git都能跟踪到,以便任何时刻都有一个追踪历史,或者在将来的某个时候可以还原

工作区与版本库

工作区:仓库所在的目录

版本库:.git目录是Git的版本库,版本库有三部分组成:

    1. 暂存区
    2. 自动创建的一个分支(master)
    3. 指向master的指针(HEAD)

以git目录为例:

 

创建版本库

  • 创建一个空目录
  • 在Git bash中cd进入该目录(注意,不是window里的那个路径,所以要你把那个文件拖到git bash里,那么就会自动转化为linux的路径了)
  • 使用git init命令初始化这个目录,让它变成Git可以管理的仓库(多了一个.git隐藏目录)

 添加文件到版本库

  •  在上述创建的目录里创建文件
  • 然后使用git add 文件名(或者.添加当前目录的所有文件)添加到仓库
  • 最后使用git commit -m "注释信息"提交到仓库

 时光穿梭机

  • git status:这个命令可以让我们掌握仓库的状态

  • git diff:查看修改的内容

  • git log:显示最近到最远提交的日志

    • git log --graph:查看分支合并图
    • git log --pretty=oneline:只查看版本号的一行

  

  • git reflog:记录每一次命令
  • 版本回退:当版本回退之后使用git log就看不到这个版本了,但是还存在,如果还要回退,就需要记录它具体的版本,利用这个回退
    • 回退上一个版本:git reset --hard HEAD^
    • 回退上上一个版本:git reset --hard HEAD^^
    • 回退到上100个版本 :git reset --hard HEAD~100
    • 回退到具体的版本:git reset --hard 具体版本(也就是上面显示的一串黄色的字符)  

创建远程仓库


 

   上面创建的都是本地仓库,开发的时候先有远程库,然后从远程库克隆到本地,创建远程前,先创建SSH_Key,其作用是只允许你认可的电脑向GitHub上传

创建SSH_key

  • 在终端上输入ssh-keygen -t rsa -C "GitHub的注册邮箱"
  • 立即.ssh目录的位置
  • 可以发现.ssh目录下有id_ras(私钥),id_ras.pub(公钥),记录公钥的内容
  • 登录GitHub,点击settings

  • 在SSH and GPGkey里点击NEW ssh key

  •  填上记录的公钥

  • 测试秘钥是否通过ssh -T git@github.com,如果通过了,钥匙就会变绿

 创建远程仓库

  • new repository

 

  • create repository

关联远程仓库

 git remote add origin 远程仓库地址

删除关联

git remote rm origin

推送本地仓库内容

git push origin master

特殊文件.gitignore:在这个文件写上该目录里的一些文件名的话,当推送到远程仓库的时候,将忽略这些文件

 

注意:需要先把远程库中的内容拉取到本地,否则会报错

拉取远程仓库的内容

git pull origin master --allow-unrelated-histories(第一次拉取的时候可能需要加这个参数)

远程库克隆

git clone 远程库地址(上面图中的地址)

 


 分支管理


   分支的作用就是在不干扰别人的情况下,创建属于自己的分支,别人在各自的分支上正常工作,自己在自己的分支上工作,想提交就提交,等写完了,就合并原来的分支,这样又安全,又不影响别人

master分支

  在版本回退中,每一次提交,Git都把它们串成一条时间线,在Git里,这个分支叫做主分支,也就是master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的。所以HEAD指向的是当前分支,每一次提交,master分支都会向前移动

创建与合并分支

  • git branch [分支名]:如果不写分支名,那么就查看所有的分支,当前分支前面有一个*,如果写分支名,那么就创建分支
  • git checkout 分支名:切换分支
  • git checkout -b 分支名:创建并切换

如果我们在dev分支上添加,修过文件并提交,那么在master分支上看不见

把dev分支的内容合并到master分支上,需要进入master分支,然后输入git merge dev(分支名)

删除分支

git branch -d 分支名

删除远程分支

  • git push origin :分支名
  • git push origin --delete 分支名

在git中,有可能出现,两个人同时提交合并,那么该分支不知道保留谁的,去掉谁的,那把两个分支的内容都添加进来,这个需要我们手动解决

 

分支策略

  在平时的开发中,master分支应该是非常稳定的,仅用来发布新版本,平时不应该在上面干活,干活应该都要在dev分支上,也就是我们每个人都在各自的分支上干活,然后合并到dev分支上,而不是合并到master分支上

 多人协作

  从远程库中克隆的时候,无论有多少个分支,默认都只克隆master分支的内容,想要在dev分支上开发,就需要创建origin的dev分支到本地,使用git checkout -b dev origin/dev

工作模式:

  当使用git push origin 分支名 推送失败的话,可能是因为远程分支比你的本地更新,需要用git pull先合并

  如果合并有冲突,那么需要解决冲突,并提交,解决冲突后就可以用git push origin 分支名推送

  如果git pull提示"no tracking information",则说明本地分支和远程分支的链接没有创建,用命令git branch --set-upstream 分支名 origin/分支名

 


标签管理


   在发布一个版本的时候,我们可以在版本库中打一个标签,这样就可以唯一确地打标签时刻的版本。将来要取某个的版本的时候,把相对应标签的版本取出来即可,标签也就是版本的一个快照

常用的命令:

  • git tag 标签名:打标签
  • git tag :查看所有标签
  • git tag 标签名 commitID:指定commd id打标签
  • git tag -a 标签名 -m “标签信息” :指定标签信息
  • gti checkout 标签名:切换到指定标签
  • git show 标签名:查看说明文字
  • git tag -d 标签名:删除标签
  • git push origin 标签名:推送标签到远程库
  • git push origin --tags:一次性推送全部尚未推送到远程的本地标签
  • 删除已经推送到远程的标签:
    • 先从本地删除:git tag -d 标签名
    • 再从远程删除:   git push origin :refs/tags/标签名

 

posted @ 2018-05-30 21:50  菜鸟也有高飞的时候  阅读(185)  评论(0编辑  收藏  举报