git了解-使用笔记

1.Git的由来与设计理念

  Git是linux之父Linus Torvalds开发的,是一款最先进的项目版本控制系统。

  Git的由来有一个小故事,传闻起初Linux社区工作者都是通过邮件的,发送给linus,由他来手工合并代码,之所以不用CVS,SVN,是因为linus对这些软件深恶痛绝,不仅仅慢,还必须联网,使用起来也很不方便。

后来,收费的版本控制提供商BitMover处于人道主义,免费提供自己的产品使用权与Linux社区,后来因为社区中有人试图破解软件已解锁更多功能,被BitMover发现后,果断收回的软件使用权。之后的事大家都了解,

linus花来两周的时间,使用C语言开发了Git,从2005年,发展都现在,成为当下最流行最先进的版本控制系统。重新定义牛的含义^_^。

  Git与CVS,SVN最大的区别是设计思想的区别,这是我认为很了不起的设计,打破的传统的中央服务器的概念。传统的版本控制软件的工作原理,是由一台大家都可以连接到的中央服务器充当核心版本,每个人都

从这个版本下载最新code修改后,提交到中央服务器。这种设计思想最大的弊端,是所有人必须联网在能工作,并且如果中央服务器挂掉,所有人都没有办法工作了;Git是一种分布式的版本控制软件,每个人电脑上的

项目都是最终版本,就是每个人都是‘中央服务器’,如果A,B两个人的代码需要同步,那么两个人电脑连接起来同步就可以了。新员工入职,可以随便从一个老员工的机器上,down一份最新的工程。

2.Git安装

    linux:sudo apt-get install git ; yum install git

    windows:  现在软件包进行安装

3.Git使用

  1.设置查看用户,邮箱

   git config --global user.name ruiql

    git config --global user.email ruiql@xxx.xxx

    git config user.name

    git config user.email

   2.基本操作

    git add xxx.xx 添加某个文件到待操作区

    git commit -m ‘改动日志’ 提交到当前分支

    git log 查看当前版本库提交日志

    git status 查看当前版本库状态

  git reset --hard HEAD^ 回退到上个版本

    git reset --hard 8a3bac1d 恢复到某个版本

    git rm 删除git上的文件

    在介绍 checkout -- 命令前,需要先介绍一下git的stage,我们知道创建一个文件加入到版本库,首先需要执行git add 命令,然后执行git commit 命令,每次修改文件同样也需要add-commit,那么为什么要两步操作呢?有两个作用

  1.add可以分多批次添加文件,然后一次commit全部提交到版本库中

    2.git区别于svn,cvs,有一个stage,也就是暂存区东西存在,我们修改的文件在工作区,工作区的修改,通过git add 命令会提交到 stage也就是暂存区中,git commit 是将暂存区内的修改,提交到版本库上。

    我们再继续介绍checkout命令,这个命令有两种使用情况,第一个情况,我们修改了工作区的文件,但是并没有通过add添加打暂存区,这个时候执行 git checkout -- xxx.xx 命令,会将版本库的版本覆盖工作区的版本,第二种情

况,如果将本地修改add到了暂存区后,又修改了工作区文件,那么执行 git checkout -- xxx.xx 命令,是将暂存区中的版本覆盖到工作区,也就是说,checkout -- 命令,会让你恢复文件内容到最近的一次add,或者commit版本。如果

文件add到了暂存区,但是没有提交,怎么撤回呢?可以通过git reset HEAD xxx.xx 命令来将暂存区内容恢复到当前版本库版本

   3.git远程库操作

   1.拷贝远程库到本地:git clone git@xxx:xx/xxx.git 使用clone 命令进行copy,如果使用github,需要在github setting中ssh菜单中添加key,key所在位置:cd ~/.ssh ; more id_ras.pub  

   2.本地工程关联远程库: git remote add  origin git@xxx:xx/xx.git 将当前分支关联到远程库 

   3.推送本地库到远程库中:git push origin master 推送分支到远程库

   4.获取远程库版本: git pull origin master 获取远程库最新版本到本地库

   5.本地分支与远程分支关联:git branch --set-upstream dev origin/dev 将本地dev分支与远程dev分支关联,之后就可以使用git push 直接推送到关联远程的分支上

   6.将本地分支提交到远程分支上:git push origin dev:dev 将本地dev分支,提交到远程dev分支上,如果远程dev分支不存在,则创建一个,GitHub亲测

   7.查看本地分支与远程分支的对应关系:git branch -vv 一个v表示本地关系,两个v表示远程关系

   4.git 分支管理

   1.创建分支:git checkout -b dev 创建dev分支,等同于两条命令:git branch dev (创建dev分支)git checkout dev(切换到dev分支),使用git branch 命令查看当前在那个分支(ps:当前分支有*)

   2.合并分支:git checkout master 切换到master分支,git merge dev 将dev更新提交到master上

   3.删除分支:git branch -d dev 删除dev分支 

   5.解决冲突

  创建一个分支:git checkout -b dev,在dev分支修改一个文件提交,git add cba.txt , git commit -m 'modify cba.txt' , 切换分支到master ,git checkout master, 继续修改cba.txt 提交,然后合并分支,

git merge dev,这个时候不能进行快速合并,因为dev分支修改了cbc.txt , master分支也修改了cba.txt ,git不知道使用那个所为最终版本,会将两个版本的区别打印在cba.txt文件内,这个时候手动合并,提交

就可以了。经常使用的命令:

   git status

   git log --graph --pretty=oneline -- abbrev-commit

   6.git 小技巧

   很多情况,我们会发生开发新功能跟改bug同时进行,如果新功能在dev-1分支上,但是master上有个紧急bug需要修复,当前的办法可以将dev代码提交,然后合并到master上,在master建立bug分支,解决

bug,然后合并到master,删除bug分支,pull master 代码继续开发功能。大部分情况是,新功能开发了一半,提交到master,会有报错或者启动不了等问题,有没有办法可以不提交代码,先改bug,然后在继续

开发的办法呢?答案是stash, 使用git stash 可以将本地环境保存起来,等干完其他事情后,再把保存的代码找回来。

   1.git checkout dev 切换到dev分支

 2.开发新功能ing

   3.git stash将新功能藏起来,产品说先改bug

   4.git checkout master

   5.git checkout -b bug-101 在master上创建改bug分支

   6.改bug,然后提交

   7.git checkout master 

   8.git merge bug-101 改完的bug合并master

   9.git checkout dev 切换到dev,我们要继续功能开发了

  10.git stash list 看看我们的开发代码藏在哪里了

  11.git stash apply stash@{0} 应用藏起来的代码继续开发(不会删除藏匿点)

  12.git stash push  恢复到开发代码,并删除藏匿点

  13.git stash drop 删除藏匿点 - - 

   

原文地址:https://www.cnblogs.com/ruiqingliang/p/7552770.html