参考:http://www.runoob.com/git/git-tutorial.html

一、Git简介

1、Git 和 SVN 比较

(1)GIT是分布式的,SVN不是;

(2)GIT把内容按元数据方式存储,而SVN是按文件;

(3)GIT分支和SVN的分支不同,在SVN中就是版本库中的另外的一个目录;

(4)GIT没有一个全局的版本号,而SVN有;

(5)GIT的内容完整性要优于SVN;

(*)Git 命令参考文档:http://www.runoob.com/manual/github-git-cheat-sheet.pdf

2、Git 安装配置

(1)安装:http://www.runoob.com/git/git-install-setup.html

(2)配置

1、安装好 git 后,配置用户和邮箱

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

说明:--global代表对当前的用户有效,--system代表对所有的用户有效,不写代表对当前的项目有效(在linux环境下)

2、常用的配置命令

要检查已有的配置信息: git config --list
直接查阅某个环境变量的设定:git config user.name

3、Git 工作流程(略)

4、Git 工作区--暂存区--版本库

(1)工作区:电脑里的项目目录;

(2)版本库:工作区有一个隐藏目录.git,是Git的版本库;

(3)暂存区:英文叫stage, 或index,一般存放在(.git/index)中;

(4)说明:git 中的 check 命令可能会导致暂存区和工作区的改变比较危险,谨慎使用;

二、基本使用

1、git init

git init     当前目录作为仓库
git init newrepo  指定目录作为仓库,没有的话会创建一个

2、git add

git add *.c
git add README

文件加入版本管理,支持单文件、多文件(之间用空格隔开)以及通配符批量 add

3、git commit

git add > git commit -m '第一次版本提交'
git commit -am '备注'-----这个操作是添加提交一次性完成,不指定文件的话会添加提交所有的

4、git clone

git clone <repo>   克隆到当前目录
git clone <repo> <directory>    克隆到指定目录
git clone git://github.com/schacon/grit.git    还支持 http 等协议,默认的名字为 grit 可以在后面指定名称

5、git status

git status 用来查看在你上次提交之后是否有修改,加参数 -s 能够获得简短的输出,不加则输出的信息比较详细

6、git diff

git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别;git status 显示你上次提交更新后的更改或者写入缓存的改动,git diff 显示这些改动具体是啥;
有如下的应用:
#查看未缓存的改动:git diff
#查看已缓存的改动(add过的文件):git diff --cached
#查看所有改动:git diff HEAD
#简略显示修改信息:git diff --stat

7、git reset HEAD

git reset HEAD 作用是取消之前 git add 添加

8、git rm

git rm <file>
git rm -f <file>  强制删除,git add 之后只能强制删除,工作区和缓存区一起删除
git rm --cached <file>  从git的缓存区删除,工作区的文件会保留,实测好像和移出版本管理是一个效果
git rm –r *   递归删除

9、git mv

git mv README  README.md    必须要先添加版本管理才可以用 git 的 mv 和 rm 命令

三、分支管理

1、查看、创建、删除分支

git branch 查看所有分支
git branch test 创建一个分支
git branch -d test 删除一个分支,D大写是强制删除分支

2、切换分支

git checkout master 分支切换git checkout -b test 能够直接创建一个分支并直接切换到该分支下注意:切换分支前一定记得提交,因为切换分支会清空暂存区,未提交的修改不会生效

3、合并分支

(1)正常合并

git merge test 此命令是将test分支合并到当前分支

(2)合并冲突:

冲突的产生:主分支创建一个分支之后,主分支和分支中的同一个文件都进行了修改,则可能出现冲突解决:merge显示冲突之后,cat a.txt 查看两分支的不同之处,手动修改为相同之后,再 add commit 提交,即可完成合并

四、查看提交历史--标签

1、查看提交历史

git log 列出历史提交记录;
--oneline 选项来查看历史记录的简洁的版本;
--graph 选项查看历史中什么时候出现了分支、合并;
--reverse参数来逆向显示所有日志;
--author=Linus 指定查看某个作者的提交;
--since 和 --before, --until 和 --after 指定日期;
--no-merges 选项可以隐藏合并提交;

2、标签

达到一个重要阶段,并希望永远记住那个特别的提交快照,可以使用 git tag 给它打上标签
git tag -a <tagname> -m "runoob.com标签" 创建一个标签
git tag 查看所有的标签

五、连接到GitHub

1、git 和 github 通过 SSH 连接

(1)使用以下命令生成SSH Key:ssh-keygen -t rsa -C "youremail@example.com"
(2)然后在 github:account--settings--SSH and GPG keys 输入上个命令产生的用户目录 .ssh 目录下的 id_rsa.pub 文件中的全部内容
(3)最后用如下命令进行连接测试:ssh -T git@github.com

2、添加、查看、删除远程仓库

git remote add [shortname] [url]    添加远程仓库
git remote -v  查看当前的远程仓库
git remote rm origin2  删除远程仓库
注意:一个仓库可以有多个别名

3、提取和推送远程仓库

(1)提取远程仓库的内容
git fetch origin
若远程仓库有更新,使用命令以下命令进行合并:
git merge origin/master
(2)推送到远程仓库
git add runoob-test.txt
git commit -m "添加到远程"
git push origin master

注意:push 前先要 commit

4、其他注意事项

(1)关于 checkout

git checkout a.txt        是从暂存区恢复git checkout HEAD a.txt   是从版本库恢复数据

(2)关于 rm 和 git rm 命令的区别

普通的 rm 命令只作用于工作区;提交生效前先要通过 add 将修改放入暂存区;git rm 命令作用于工作区和暂存区;

(3)关于 git log 和 git reflog

log    命令只能查看 commit 的记录;reflog 可以查看所有的记录,包括 commit、reset、merge;

(4)本地删除文件后且进行了提交,怎么恢复

git reflog              找到相应的 HEAD;git reset --hard  XXXX  通过 reset 命令恢复,其中最后的 XXXX 是 HEAD 的地址(或者键???);

(5)关于 git pull

git pull = git fetch + git merge冲突解决:将本地的内容和远程的内容改成一致的,再 add 和 commit 一下即可;

(6)本地删除文件后怎么从 github 恢复

git fetch origin                  先从远程仓库拉取;git reset --hard origin/master    将工作区、暂存区和本地仓库全部替换为远程仓库 origin 的 master 分支;后面如果 origin 仓库没有修改可以直接用这个命令进行恢复;

使用Git进行版本管理的更多相关文章

  1. 微信小程序如何使用 Git 实现版本管理和协作开发

    前言 在微信小程序开发的过程中,代码版本管理往往需要使用第三方工具进行管理.虽然微信Web开发工具提供了对Git文件版本状态的提示,但实际的使用体验依然不尽人意. 随着微信Web开发工具的更新,最新的 ...

  2. 实验一 GIT 代码版本管理

    实验一  GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)   熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...

  3. 实验一  GIT 代码版本管理

    实验一  GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ini ...

  4. 实验一Git代码版本管理

    GIT代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git ...

  5. 实验一&#160;&#160;GIT 代码版本管理

    实验一  GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)   熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...

  6. 软件工程实验一 Git代码版本管理

    实验一  GIT 代码版本管理 一.实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)熟练掌握git的基本指令和分支管理指令: 二.实验内容: 1)安装git: 2)初始配置git ,gi ...

  7. 用好SVN与Git,版本管理都不是问题

    介绍一下SVN SVN:代码控制器(版本控制器),主要是为了多人协同开发项目,管理代码.也可以管理个人代码.也叫程序界的”后悔药“. SVN(是subversion的简称)是近年来一款基于C/S架构的 ...

  8. 实验1 GIT代码版本管理

    (一)实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: (二)实验内容: 1)安装git 2)初始配置git ,git init git sta ...

  9. 实验一 git代码版本管理

    实验目的 1. 了解分布式系统版本管理的核心机理. 2. 熟练掌握 git 的基本指令和分支管理指令. 实验内容 1. 安装 git.2. 初始化配置 git,git init ,git status ...

随机推荐

  1. SSIS - 11.For循环容器

    一.For循环容器中的3个循环变量 For循环容器,类似于编程语言中的For,用于重复执行容器内的任务,直到条件返回为False.与编程语言类似,For循环容器也需要定义以下3种循环属性: 注: 必须 ...

  2. jsp中input获得后台传递的值

    1.后台赋值 req.setAttribute("openId",openId); 2.前台获取值 value="<%= request.getAttribute( ...

  3. rem布局完成响应式开发,通俗且详细的原理解析和代码实现

    一.rem布局基本原理 原理:rem可以理解为一个长度单位,单位rem的值等于网页font-size的值.如果网页的字体大小为默认值16px,那么1rem就等于16px,0.5rem等于8px. 根据 ...

  4. Python程序里的注释和#号

    Python程序里的注释是很重要的.它们可以用自然语言告诉你某段代码的功能是什么.在你想要临时移除一段代码时,你还可以用注解的方式将这段代码临时禁用.接下来的练习将让你学会注释 : # A comme ...

  5. [Swift]LeetCode154. 寻找旋转排序数组中的最小值 II | Find Minimum in Rotated Sorted Array II

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  6. 1、MySQL主从同步机制及同步中的问题处理

    http://www.drupal001.com/2012/03/mysql-master-slave-troubles/ http://www.jb51.net/article/33052.htm

  7. qt4升级到qt5的一些问题

    由于最近项目使用的qt版本从qt4.8升级到qt5.5,虽然从4到5的变化不大,不过还是有许多的问题需要记录一下,希望可以帮助到更多的人​ 1.由于Qt5将大部分桌面部件移到了Qt Widgets模块 ...

  8. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  9. (四)五种IO模型

    基本概念 我们之前编写的套接字程序都是阻塞式的,其实这也是默认的形式.现在我们需要明确一些概念: 用户空间和内核空间 首先要明确,用户启动的应用程序在系统中以一个进程的形式存在,而无论对于网络数据还是 ...

  10. RabbitMQ消息队列(五)-安装amqp扩展并订阅/发布Demo(.Net Core版)

    publish发布消息 新建一个Asp.Net Core控制台项目:PublishDemo 安装Nuget包 Install-Package RabbitMQ.Client 添加命名空间引用 usin ...