一、配置用户信息:

配置用户名和邮箱:

$ 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. QT记录

    /******************************************************************************************/ .

  2. python在一个画布上画多个子图

    转载:https://blog.csdn.net/qq_26449287/article/details/103022636 matplotlib 是可以组合许多的小图, 放在一张大图里面显示的. 使 ...

  3. 【原创】经验分享:一个小小emoji尽然牵扯出来这么多东西?

    前言 之前也分享过很多工作中踩坑的经验: 一个线上问题的思考:Eureka注册中心集群如何实现客户端请求负载及故障转移? [原创]经验分享:一个Content-Length引发的血案(almost.. ...

  4. dockerfile镜像设置中文

    一.dockerfile镜像设置中文 centos镜像默认不支持中文,把下面的内容加到dockerfile即可 # 修改时区 RUN rm -rf /etc/localtime && ...

  5. GC调优-XX:PrintGCDetails深度解析

    查看程序运行GC的运行情况 资源充足的GC情况 新生代 老年代 元空间 因为现在资源充足没有发生GC *案例:将JVM初始化内存与最大内存(防止内存抖动,反复GC)调至10m,new一个50m的数组对 ...

  6. C++中线程安全单例模式的正确实现方式

    为什么说DCLP不是线程安全的 DCLP(Double Checked Locking Pattern),即双检锁模式: class Foo { public: static Foo* getInst ...

  7. 为什么说switch比if快

    C++的switch语法 在C++中,switch只接受整型常量作为分支的值: switch (expr) { case integral-constant : \\... break; case i ...

  8. 【编程学习】浅谈哈希表及用C语言构建哈希表!

    哈希表:通过key-value而直接进行访问的数据结构,不用经过关键值间的比较,从而省去了大量处理时间. 哈希函数:选择的最主要考虑因素--尽可能避免冲突的出现 构造哈希函数的原则是: ①函数本身便于 ...

  9. xshell多窗口同时执行输入命令

  10. 【API管理 APIM】APIM集成内部VNet时,常遇见的关于自定义DNS服务问题。

    问题描述 Azure 的APIM集成虚拟网络有两种方式,外部VNET, 内部VNET. 外部VNET,要求低,可以通过APIM访问VNET中的VM等资源,不需要配置自定义DNS服务器,这种方式下,AP ...