一、配置用户信息:

配置用户名和邮箱:

$ git config --global user.name “chunyu”

$ git config --global user.email 1812928598@qq.com

Git把用户的配置信息放在C:\Users\mis\.gitconfig

二、初始化一个本地的git仓库:

$ git init

跟踪文件:

$git add index.html(跟踪完文件之后,这个文件被存放在暂存区中)

跟踪多个文件:

$ git add *.html  或者 $ git add .

如果文件在暂存区中,此时对文件进行修改,则需要再次将文件添加到暂存区中(add)

如果对本地版本库中的文件进行修改,还没有添加到暂存区,可以查看文件的修改内容: $git diff index.html

把跟踪好的文件提交到版本库中:

$ git commit -m “add a html file” 参数-m的作用:告诉git提交解释信息为add a html file

(提交完文件之后,这个文件就被保存到本地版本库中)

查看提交记录:

$ git log (简洁版:$git log --pretty=oneline

查看工作区目前的状态:

$ git status

如果多次修改文件,并提交到本地版本库中,如果想回退到上一个版本,则:

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

$git reset --hard HEAD^//表示回到上个版本

现在回到了老版本,如果现在又想回到新版本,则:

只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个最新版本的commit id是6e1f7...,于是就可以指定回到未来的某个版本:

$git reset --hard 6e1f7

如果命令行窗口被关掉了,则可以使用$git reflog来查看每一次命令(历史命令)。这时找到最新版本的commit di,再使用上个命令就可以回到最新版本了。

 

撤销修改:$git checkout -- read.txt(就是让这个文件回到最近一次git commit或git add时的状态。)

 

如果修改完一个文件,并将这个文件保存到暂存区中了,但是这个时候发现修改有问题,这时可以用$git reset HEAD read.txt 命令把暂存区的修改回退到工作区。(这时相当于修改完文件,没有执行add命令,这时可以执行上个命令撤销修改。)

 

删除文件并提交到版本库:

1、手动删除文件

2、$git rm test.txt

3、$git commit -m “delete the test.txt file”

三、分支管理:

在若干次提交后,其实已经有了一个指向最后一次提交对象的master分支,它在每次提交的时候都会自动向前移动。

创建分支:

$ git branch testing    //这会在当前commit对象上新建一个分支指针

Git保存着一个名为HEAD的特别指针,它是一个指向你正在工作中的本地分支的指针,运行git branch命令,只是创建了一个新的分支,但不会自动切换到这个分支中去,所以,现在我们依然是在master分支上工作。

显示当前的分支:

$ git branch

切换到其他分支:

$ git checkout testing //转换到testing分支

($ git checkout -b iss53,相当于以下两条命令的合并:$git branch iss53、$git checkout iss53,创建分支并切换到该分支上

此时在testing分支上进行修改文件,则现在的状态为:

此时再切换回master分支:$ git checkout master

现在HEAD指针又指向master分支,并把工作目录中的文件换成了master分支所指向的快照内容,也就是说,现在开始所做的改动,将始于一个较老的版本。

在master分支上对文件进行修改,现在项目文件产生了分叉,因为刚才在testing分支上进行了一些修改,然后又回到master分支上进行了另外的修改。这些改变分别孤立在不同的分支里:

四、分支的合并:

当数据结构是以下状态时:

要合并master分支和hotfix分支:首先回到master分支上,$git checkout master,然后合并hotfix分支,$git merge hotfix。此时的状态为:

注意到,合并时出现了fast-forward(快进)提示,由于当前master分支所在的commit是要并入的hotfix分支的直接上游,git只需把指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支,那么git在合并两者时,只会简单的把指针前移,因为没有什么分歧需要解决,所以这个过程叫做快进。

现在hotfix分支和master分支指向相同的提交版本,可以删除hotfix分支:

$git branch -d hotfix

删除没有被合并的分支:

$git branch -D hotfix

当出现以下结构,并且要合并hotfix和iss53分支时,则会出现合并冲突

合并冲突:两个分支有相同的文件,而且同位置上的内容不相同,如果合并这两个分支,则会产生冲突。这个时候需要手动修改发生冲突的文件。当手动解决冲突后,用$git add test.txt 命令表示文件的冲突已经解决好了,并提交到暂存区。

 

Bug分支:

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

功能分支:

添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

五、$git stash命令:在当前的分支上工作到一半,还没有提交,需要切换到其他分支上去, 用$git stash命令保存当前的状态,然后就可以切换到其他分支上了。

$git stash list:查看存储点列表

$git stash apply 存储点名称:回到之前存储的状态

六、用SSH生成公钥和私钥:

ssh-keygen -t rsa -C “1812928598@qq.com”

生成的公钥和私钥文件存储在C:\Users\mis\.ssh

公钥为id_rsa.pub,就相当于一把锁,需要放在git服务器上。

私钥为id_rsa,相当于钥匙。

测试SSH公钥是否成功:ssh git@git服务器地址(如:$ ssh git@github.com)

七、克隆远程仓库:

$git clone git@远程仓库url(如:$git clone git@github.com:XiaoKongQi/testhtml009.git)

当从远程库clone时,默认情况下,你只能看到本地的master分支。现在,你要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是用这个命令创建本地dev分支:$git checkout -b dev origin/dev

推送数据到远程仓库:

$git push -u [远程仓库名] [本地推送的分支名]

(如:$git push -u origin master,把本地的master分支推送给了远程仓库,并且在远程仓库origin中创建了一个远程的master分支,远程的master分支和本地master分支关联;如果你推送的是bcy分支:$git push -u origin bcy,那么远程库会自动创建bcy分支,并与本地的bcy分支进行关联)

如果将本地的test分支推送到远程的master分支上:$git push -u origin test:master)

推送本地仓库的所有分支到远程仓库上去:

$git push -u [远程仓库名] --all

查看本地分支与远程分支的联系:

$git branch -vv

查看当前远程仓库:

$git remote -v

查看远程的分支:

$git branch -r

从远程仓库抓取数据:

$git fetch [远程仓库名](如:$git fetch origin,抓取下来之后,对本地没有任何影响)

在本地分支上,合并远程分支:

$git merge 远程仓库名/分支名

只有在所克隆的服务器上有写权限,并且同一时刻没有其他人在推送数据,这条命令才会如期完成任务。如果你在推送数据前,已经有其他人推送了若干更新,那你的推送操作会被驳回,你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。

当从远程仓库把别人的更新抓取到本地之后,可以看看在我们推送之前,别人做了什么,

$git log --no-merges origin/master。

$git pull 相当于$git fetch $git merge 远程仓库名/分支名,抓取远程数据,并在本地分支上合并远程分支。若合并有冲突,则需手动解决冲突,若合并无冲突,则本地就跟远程数据一样了。

如果本地有一个master分支和远程的origin/master分支没有建立跟踪关联,需要使用$git branch --set-upstream-to=origin/master

查看远程仓库信息:

$git remote show origin

重命名远程仓库名:

$git remote rename 原名 新名

远程仓库的删除:

$git remote rm 远程仓库名

将本地仓库与远程仓库进行关联:

$git remote add origin git@远程服务器地址(如:$git remote add origin git@github.com:michaelliao/learngit.git)(关联之后,一般要将本地master分支与远程master进行关联:$git branch --set-upstream-to=origin/master,在关联master分支之前,先git pull一下,然后再关联master分支。关联之后如果pull代码,如果报错: refusing to merge unrelated histories,就这样pull:$git pull origin master --allow-unrelated-histories

八、标签:

在Git中打标签非常简单,首先,切换到需要打标签的分支上,然后,敲命令git tag <name>就可以打一个新标签:(默认标签是打在最新提交的commit上的)

$ git tag v1.0

 

创建带有说明的标签,用-a指定标签名,-m指定说明文字::

$git tag -a v0.1 -m “version 0.1 released” 1094adb

 

对老版本打标签:

①先找到历史提交的commit id:$git log --pretty=oneline --abbrev-commit

②找到对应的commit id:$git tag v0.9 e27928

 

查看所有标签:

$git tag

 

查看标签信息:

$git show v0.9

 

删除标签:

$git tag -d v0.1

推送某个标签到远程,或者,一次性推送全部尚未推送到远程的本地标签::

$git push origin v1.0,$git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9

然后,从远程删除。删除命令也是push,但是格式如下:

$git push origin :refs/tags/v0.9

九、忽略特殊文件

忽略某些文件时,需要编写.gitignore,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore文件要提交到本地版本库中。

在eclipse中使用git:

https://blog.csdn.net/Adelly/article/details/79099772#_Toc480656628

 

 

 

 

 

Git的介绍及使用的更多相关文章

  1. git使用介绍

    Git简单介绍 参考网址: git使用简介 这个教程推荐使用:git教程 git和svn的差异 git和svn的最大差异在于git是分布式的管理方式而svn是集中式的管理方式.如果不习惯用代码管理工具 ...

  2. SourceTree 01 - git 客户端介绍

    SourceTree - git客户端介绍 SourceTree系列第1篇 --->> SourceTree 01 - git 客户端介绍(http://www.cnblogs.com/g ...

  3. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...

  4. git基础介绍

    git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件 ...

  5. GitHub的SSH key配置以及常用的git命令介绍

    一. GitHub的SSH key配置 (以windows为例,Mac iOS系统类似) SSH Key 是一种方法来确定受信任的计算机,从而实现免密码登录.Git是分布式的代码管理工具,远程的代码管 ...

  6. 版本控制工具(SVN/Git)介绍

    文章大纲 一.SVN介绍二.Git介绍三.IDEA使用SVN和Git四.总结五.参考文章   一.SVN介绍 1. SVN服务器搭建和使用 首先来下载和搭建SVN服务器,下载地址如下: http:// ...

  7. GIT命令介绍

    Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下. 区别与集中式的分布式实现!!!! 集中 ...

  8. Git基本介绍(三大分区及核心内部构造)

    1. Git三大工作区(工作区.暂存区和版本库) 工作区(WORKING DIRECTORY): 直接编辑文件的地方,肉眼可见直接操作: 暂存区(STAGIN AREA):数据(快照)暂时存放的地方: ...

  9. Git的介绍以及安装

    Git的简单介绍 Git是一个开源的分布式版本控制系统,可以有效,高速的处理从很小到非常大的项目管理,GIT是为了帮助linux内核开发而开发的一个开放源码的版本控制软件 Git的安装 Linux平台 ...

  10. Git&Github介绍

    git&github 什么是GIT 是一个源代码管理工具 源代码为什么要管理起来? 你写的东西就叫源代码,第三方的库和框架都不算. 让源代码可以被追溯,主要记录每次变更了什么,谁主导这次变化. ...

随机推荐

  1. pytorch和tensorflow的爱恨情仇之基本数据类型

    自己一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀...) 无论学习什么框架或者是什么编程语言,最基础 ...

  2. C 多态 RT-Thread

    // RT-Thread对象模型采用结构封装中使用指针的形式达到面向对象中多态的效果,例如: // 抽象父类 #include <stdio.h> #include <assert. ...

  3. Web Storage API的介绍和使用

    目录 简介 浏览器的本地存储技术 Web Storage相关接口 浏览器兼容性 隐身模式 使用Web Storage API 总结 简介 Web Storage为浏览器提供了方便的key value存 ...

  4. 083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法

    083 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 02 构造方法-带参构造方法 本文知识点:构造方法-带参构造方法 说明:因为时间紧张, ...

  5. C++里的程序 GetDlgItem(IDC_EDIT_INPUTFILE) ->EnableWindow(TRUE)

    转载:https://zhidao.baidu.com/question/654519209423407765.html GetDlgItem(IDC_EDIT_INPUTFILE) ->Ena ...

  6. Centos 6.9 安装 php5.6

    1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们, 如: yum remove php.x86_64 php-cli.x86_6 ...

  7. nginx完美支持thinkphp3.2.2(需配置URL_MODE=>3 rewrite兼容模式)

    来源:http://www.thinkphp.cn/topic/26637.html 环境:nginx 1.6,thinkphp3.2.2 第一步,修改server块 server { listen ...

  8. redis哨兵搭建

    redis哨兵搭建 1.复制配置文件到conf #单机安装以后[root@t3 redis-5.0.8]# pwd/app/redis-5.0.8[root@t3 redis-5.0.8]# cp s ...

  9. 6.Android-五大布局

    Android 五大布局如下所示: LinearLayout 线性布局 只能指定一个方向(垂直/水平)来布局 RelativeLayout 相对布局 通过某个控件为参照物,来定位其它控件的位置的布局方 ...

  10. SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码

    页面展现 后台任务处理:恢复任务 15s执行一次后台打印消息 不BB了,直接上代码 import... /** * 调度工厂类 * Created by jinyu on 2018/4/14/014. ...