Git学习笔记

2014-06-29 学习笔记

这两天断断续续的初步学习了下Git,初步掌握了Git的一些用法。
 
学习的过程是按 廖雪峰老师的Blog 上来的,他的教程写的十分详尽,而且还附有视频,想要学习Git的同学可以点击超链接。
 
接下来我会在下面将我学习到的,认为十分有用的部分总结一下,权当复习,同时也备忘一下
 
PS:本文中所有的图片都来自 廖雪峰老师的Blog

Git的安装

这一部分没什么好讲的,GitHub客户端中已经自带了Git,只要安装了客户端,就可以使用Git命令。而且只要你在GitHub上登录了自己的帐号,就相当于设定了自己的全局身份标志。当然你也可以通过如下命令行来直接修改自己的身份标志。

  • 给所有版本库制定用户名和邮箱地址
    $ git config --global user.name "Your Name"
    $ git config --global user.email "Your E-mail@XXX.com"

    上面命令行中的--global参数表示的是这个命令行是应用到全局的,也就是你电脑上所有的版本库都会应用加参数的命令。

版本库操作

工作区(Working Directory)是一个Git管理的目录,而在工作区下会有一个.git文件夹,这个不算工作空间,而是Git的版本库(repository),它是在调用git init命令时自动生成的,里面的东西不要动。版本库里有很多东西,其中最重要的就是被称为stage(or index)暂存区
工作区,版本库,暂存区的关系如下图所示

  • git init 初始化版本库;
  • git add textname 向暂存区(stage)提交文件修改,***git add . ***提交所有修改;
  • git commit -m "Description Text" 提交所有暂存区里的修改;
  • git status 查看工作区的状态;
  • git diff 查看修改内容;
  • git reset -hard commit_id 跳转到commit_id标志的那个版本,可以用HEAD来代替本版本,HEAD代表往上一个版本,而HEAD^^则是往上两个版本,以此类推,而HEAD~100则代表往上一百个版本。(HEAD其实是指向当前版本的指针,Git中的版本切换实质上是指针的移动。);
  • git log可以查看提交历史,加入--pretty=oneline则可以将每次提交都简化为一行信息;
  • git reflog 查看命令历史,可以通过调用这命令来看未来的版本号,从而跳到往前的版本库;
  • git checkout -- filename 丢弃工作区的修改;
  • git reset HEAD filename 丢弃所有暂存区的修改;
  • git rm filename 在使用rm filename删除文件后输入此命令确认删除,并要git commit提交,要撤销删除则应该用git checkout --filename 来进行撤销;

远程仓库

在与远程仓库连接的时候,要在远程仓库上添加本机的SSH Key

  • git remote add origin URI 添加URI上的远程仓库,origin是远程库的名字,可以改成别的,但不建议;
  • git push -u origin master 推送master到远程仓库,其中-u参数是在第一次推送的时候要加上的,它能使本地master分支与远程仓库上的master分支关联,以后就不需要再加这个参数了。同时,这个命令也可以简化成git push通过设置可以指定这个命令是推送当前分支还是通过名字匹配的方式来推送所有分支;
  • git clone URI 将URI上的远程仓库克隆到本地;

分支管理

Git的分支管理和版本回溯一样都是通过指针实现的,所以速度飞快。
分支策略

  • master分支是主分支,应该是十分稳定的,仅用来发布新版本,平时不在上面干活,只有在发布版本时,会将dev分支合并到master分支上,进行版本发布;
  • dev分支则是主要用来干活的分支,所以dev分支是不稳定的;
  • 个人分支,每个人都有自己的分支,时不时将自己的分支合并到dev分支上;
  • bug分支是存在本地用于修复Bug用的;
  • feature分支则是开发新功能时开辟的; 所以多人协作的分支看起来就像这样: 而本地分支向远程仓库的推送策略一般如下:  
  • maater分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复Bug,没有必要推送到远程;
  • feature是否推送到远程,取决于你是否和小伙伴一起在上面开发;
  • git branch 查看分支;
  • git branch name 创建分支;
  • git checkout name 切换分支;
  • git chekout -b name 创建并切换分支;
  • git merge name合并某分支到当前分支,加上--no- ff -m "describtion"参数可以禁用“Fast forward”而使用普通合并,因为这样合并分支要创建一个新的commit,所以要加-m参数,将commit描述写进去;
  • git branch -d name 删除分支,git branch -D name可以强行删除未被合并的分支;
  • git log --graph 查看分支合并图;

标签管理

发布一个版本时,我们通常先在版本库中打一个标签。标签相当与版本库的一个快照,可以快速将打过标签的历史版本取出来。
实际上Git的标签实质上是指向某个commit的指针,所以创建和删除标签也是十分迅速的。

  • git tag name 新建一个标签,默认为该HEAD,也可以指定一个commid_id;
  • -a tagname -m "blablabla..."参数可以指定标签信息;
  • -s tagname -m "blablabla..."可以用PGP签名标签;
  • git tag 查看所有标签;
  • git push origin tagname 可以推送一个本地标签
  • git push origin --tags 可以推送所有未被推送过的本地标签
  • git tag -d tagname 删除一个本地标签
  • git push origin :refs/tags/tagname 删除一个远程标签

设置别名备忘

通过设置别名可以快速输入很多复杂的命令(其实是可以偷懒了),下面是我设置的一些别名,备忘如下:

  • $ git config --global alias.st status 用git st代替git status
  • $ git config --global alias.co checkout 用git co代替git checkout
  • $ git config --global alias.ci commit 用git ci代替git commit
  • $ git config --global alias.br branch 用git br代替git branch
  • $ git config --global alias.unstage 'reset HEAD' 使用git unstage撤销暂存区的修改
  • $ git config --global alias.last 'log -1' 使用git last查看最后一次的commit
  • git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 色彩鲜艳的查看commit的情况,效果图如下

Comments
Write a Comment