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 删除藏匿点 - -
git了解-使用笔记的更多相关文章
- Git Pro读书笔记
本文为Git Pro读书笔记,所有内容均来自Git Pro 1 Git基础 1.1 记录每次更新到仓库 在Git里,文件有4种状态,modified, staged, commited, 还有一种状态 ...
- git的学习笔记(二):git远程操作
1.创建ssh key ssh-keygen -t rsa -C "your_email@example.com" 执行命令后会在用户的家目录生成.ssh的隐藏文件夹,文件夹里有公 ...
- git tag 常用笔记
git tag 常用笔记 查看 tag 列出现有 tag git tag 列出 v1.4.2 相关的 tag git tag -l "v1.4.2" 查看指定 tag 的信息 gi ...
- git学习小结 (笔记)
Modesty helps one to go forward, whereas conceit makes one lag behind. "虚心使人进步,骄傲使人落后" 注:本 ...
- HIT2019春软件构造->Git&Github学习笔记
由于软件构造课程需要,学习使用git,以下作为学习笔记. 一.Git初始化及仓库创建和操作 1.基本信息设置(设置签名) 命令 项目级别/仓库级别:仅在当前本地库范围内有效 git ...
- git的学习笔记整理
Git学习较好的网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373 ...
- git常用操作笔记
这是我看了廖雪峰的git教程,写的笔记,仅作为一个学习的记录 一.大多数我们面临的是已经有一个进行中的项目了,我们只需克隆下来就可以了 1.安装git,安装完后,可输入git,回车,查看是否已安装 2 ...
- Git源代码管理笔记
很早之前也学过git但是没有详细的记录,这次是做个复习,巩固 若有不对的地方请您指出 目录 Git和SVN有什么区别? 什么是Git? github仓库 Star和Fork Pull request ...
- 版本控制工具Git的学习笔记
在网上看到一个很不错的Git教程,学习后果断要做一下总结. 教程地址:http://www.liaoxuefeng.com/ 总结要点: 安装Git因为我个人的开发主要是基于windows环境下,所以 ...
- 代码管理工具 --- git的学习笔记二《git的工作原理》
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...
随机推荐
- Laravel 5 速查表
Artisan // 在版本 5.1.11 新添加,见 http://d.laravel-china.org/docs/5.1/authorization#creating-policiesphp a ...
- leetcode 最大不重复字符
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if len(s) <= 1: return len( ...
- JavaSE基础知识(7)—常用类
一.包装类 1.理解 java为八大基本数据类型一一对应提供了引用类型,方便使用里面的属性和方法 2.包装类型 byte——>Byteshort——>Shortint——>Integ ...
- tiny4412 --Uboot移植(5) DDR3内存
开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...
- database锁实现
单独创建一张表存放获取锁所需的key和value,key值保持唯一,value从0开始按1递增,在代码中用私有成员变量ConcurrentHashMap存储每个key value值,初始化时每个线程的 ...
- struts 1.x配置文件说明
<struts-config> <global-exceptions /> <!--全局映射定义--> <global-forwards> <fo ...
- 面试简单整理之Redis
179.redis 是什么?都有哪些使用场景? Redis是一个key-value存储系统. 缓存,消息队列,排行榜/计数器,分布式架构,做session共享 180.redis 有哪些功能? 181 ...
- shell速查
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell.bash由Brian Fox和Chet Ramey共同完成,是Bourn ...
- Java中String字符串常量池
首先看一个例子,通过这个例子更能快速理解String常量池 public static void main(String[] args) { String a = "ab"; St ...
- WCF系列_WCF常用绑定选择
一.五种常用绑定常用绑定的传输协议以及编码格式 名称 传输协议 编码格式 互操作性 BasicHttpBinding HTTP/HTTPS Text,MTOM Yes NetTcpBinding TC ...