Git基础



Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。


Git与SVN区别

  • 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  • 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  • 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  • 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  • 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

文章目录

一、Git安装配置
二、Git基本操作
三、Git分支管理
四、Git.远程仓库


一、Git安装配置

Git目前支持Mac、Windows、Linux/Unix和Solaris平台。
各平台安装包下载地址:http://git-scm.com/downloads

Windows平台安装

下载安装包之后根据提示进行安装



安装完成后就可以使用命令行的git工具了(自带ssh客户端),和一个带图像界面的git项目管理工具(Git GUI)。
可以通过桌面图标或者开始菜单找到->"Git"->"Git Bash",点击会弹出Git命令窗口,可在该窗口进行Git操作。


Mac平台下的安装

1.下载git客户端,地址:https://git-scm.com/download/mac
mac平台下的图像化git安装工具,地址:http://sourceforge.net/projects/git-osx-installer/

2.打开安装包,进行安装。



Linux平台安装

Linux操作系统git安装命令参考:https://git-scm.com/download/linux

  • Ubuntu安装命令:
$ apt-get install git
  • 若提示需要权限则输入:sudo passwd root,首先输入登陆密码,然后设置新的root密码,接着输入suEnter键,输入设置好的root密码获取root权限。

安装过程需要输入几次y+回车,之后等待自动下载安装。

  • 输入git --version查看git版本
    安装完成

二、Git基本操作

配置用户信息

  • 以下两条命令用于配置个人用户名称和电子邮件地址:
git config --global user.name "XXX"
git config --global user.email xxxx@gmail.com

--global:添加了此命令,那么更改的配置文件就是位于用户主目录下的,以后的项目都将默认使用此用户信息。若需要为某个项目使用其他用户信息,只需要去掉--global重新配置即可,新的配置保存在当前项目的.git/config中。

  • 查看配置信息命令:
git config --list   //也可以将--list换为具体的某个环境变量如:user.name

创建仓库

Git的很多命令都需要在Git仓库中运行,所以我们最先做的就是创建一个仓库。

  • 我们可以使用一下命令将当前目录作为git仓库,并初始化:
git init
  • 或者使用指定目录作为仓库:
git init newrepo
  • 初始化后,目录下会生成一个名为.git的目录,我们要将当前目录下的几个文件纳入git版本控制下,需要先用git add让git对文件开始跟踪,之后提交。
git add *.c                    //将以.c结尾的文件提交到仓库
git add README                 //将README文件提交到仓库
git commit -m '初始化项目版本'

克隆仓库

使用git clone命令从现有Git仓库中拷贝项目,类似于svn checkout。

  • 克隆仓库的命令:
git clone <repo>                //repo:Git仓库地址
  • 克隆到指定目录:
git clone <repo> <directory>    //directory:本地目录

基本快照

Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。

git status
git status 可以查看在你上次提交之后是否有修改。

  • 使用git status命令查看项目当前状态:
git status -s                  //-s:简短输出

??: 未添加到缓存
A: 已添加到缓存
M: 有改动
AM: 添加到缓存后又有改动

git diff
git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。

  • 使用git diff命令查看git status执行结果的详细信息:
git diff            //尚未缓存的改动
git diff --cached   //已缓存的改动
git diff HEAD       //已缓存和未缓存的所有改动
git diff --stat     //显示摘要

git commit
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。

  • 将内容添加到仓库:
git commit -m '第一次提交版本'   

-m:提交注释,如果不设置-m选项,那么git会尝试打开一个编辑器以填写提交信息,默认vim。效果如下:


  • 如果觉得git add提交缓存比较麻烦,也可以使用-a跳过:
git commit -a
git commit -am '第二次提交版本'

git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。

git reset HEAD    //也可以使用 --文件名 的形式指定具体文件

git rm
git rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。 git reset HEAD是将缓存区恢复为做出修改之前的样子。git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。

  • 不从工作区删除文件:
git rm --cached 文件名

git mv
git mv 命令做得所有事情就是 git rm --cached 命令的操作, 重命名磁盘上的文件,然后再执行 git add 把新文件添加到缓存区。

git mv 原文件名 修改后文件名

三、Git分支管理

几乎每种版本控制系统都支持类似的分支,使用分支从开发主线中分离,在不影响主线的同时继续工作。Git的分支模型是最赞的

  • 创建分支命令:
git branch (branchname)
  • 切换分支命令:
git checkout (branchname)

切换分支时,Git会用该分支最新的快照替换工作目录的内容,所以多个分支只需要一个目录。

  • 列出分支命令:
git branch        //没有参数时,会列出本地的分支

当执行git init 时,Git会默认创建"master"分支。
当我们创建了一个分支,在该分支的的上下文中新增删除了一些文件后,切换回主分支,那些修改的东西都不见了。
使用分支就可以让我们在不同的上下文中工作,来回切换,而不影响主线。

  • 删除分支命令:
git branch -d (branchname)
  • 合并分支命令:
git merge

合并冲突
合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。
我们可以在master分支中创建文件test.txt,并写入github.com,提交到仓库。
然后创建一个change_site分支,并切换过去。

git branch change_site
git checkout change_site

修改test.txt文件内容为 https://github.com ,提交后切换回master分支。

git commit -am 'merge test 1'
git checkout master

将change_site分支合并到master分支。

git merge change_site

此时会提示我们文件冲突,需要我们手动修改。



修改完成后可以通过git add告诉Git文件冲突已解决。

git add test.txt
git commit

Git查看提交历史

在提交了多次更新后,想要查看提交历史,可以使用以下命令:

git log

输出结果:


查看历史记录简介版本:

git log --oneline

输出结果:


使用--graph查看什么时候出现了分支、合并:

git log --oneline --graph

输出结果:


其他log命令:https://git-scm.com/docs/git-log

--reverse 逆向显示日志
--author 指定具体某一个作者
--since 和 --before 指定日期
--decorate 查看标签


Git 标签

如果你想要记住或标记某个重要的快照,就可以使用标签。

  • 比如我们提交了项目v2.0版本,可以使用以下命令:
git tag -a v2.0
  • -a是创建一个带注解的标签,记录标签作者、生成时间等.
  • 使用了-a,Git会打开一个编辑器让你输入标签注解,就和写提交注解一样。
  • 使用命令git tag可以查看所有标签。
  • 如果想给已提交的某个快照追加标签,可以使用如下命令:
git tag -a v1.0 64ff8e3    //64ff8e3是上图日志最后一行

快速指定标签信息:

git tag -a v3.0 -m 'author:噫那里有条咸鱼'

四、Git远程仓库(Github)

添加远程仓库

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:

1.创建ssh

  • 检查ssh
    打开终端,运行 cd ~/.ssh
    如果路径下无文件跳过下一步操作,如果有文件代表已有ssh key,需要进行备份
  • 备份已有ssh
mkdir key_backup
mv id_rsa* key_backup
  • 生成ssh key
ssh-keygen -t rsa -C xxxx@gamil.com   //注册的main邮箱

执行后终端会显示

2.将ssh key添加到github上

  • 在终端输入,mac平台:open ~/.ssh id_rsa.pub,Windows平台:start ~/.ssh id_rsa.pub,打开文件id_rsa.pub,拷贝key值。
  • 打开https://github.com/官网,登录后,点击账户-ssh公钥,输入拷贝的key值,提交。

3.测试链接是否成功

  • 在终端输入ssh -T git@github.com
    这里会要求你输入SSH key密码,如果刚才生成SSH key时未输入密码,密码就为空。
  • 看到:Hi 用户名! You’ve successfully authenticated说明配置成功。

配置成功后SSH会由黑色变为绿色。


4.New repository(新建仓库)
登录Github点击New repository,之后在repository name填入test(远程仓库名),其他设置默认即可,之后点击Create repository,就成功创建了一个Git仓库。

5.本地上传文件到远程库
依次执行以下命令:

mkdir test                                        //创建测试目录
cd test                                           //进入测试目录    
echo "git测试" >> README.md                   //创建README.md文件并写入内容
git init                                          //初始化
git add README.md                                 //添加文件到缓存
git commit -m "添加 README.md 文件"                //提交并添加备注
git remote add origin git@github.com:账户名/仓库名  //提交到远程仓库
git push -u origin master 

查看远程库

实例:-v参数—— 查看每个别名的实际链接地址

$ git remote       
origin
$ git remote -v    
origin  https://github.com/账户名/test (fetch)
origin  https://github.com/账户名/test (push)

提取远程仓库

  • 从远程仓库下载新分支与数据:
git fetch
  • 从远程仓库提取数据并尝试合并到当前分支:
git pull

当我们需要提取更新的数据,可以先执行 git fetch[别名]让Git去获取本地没有的数据,然后执行git merge[别名]/[branch]将更新的数据合并到当前分支。

实例:
通过在线修改README.md文件:

在本地提取更新:


将更新同步到本地:


查看README.md文件内容:


删除远程仓库

  • 删除远程仓库命令:
git remote rm [别名]

实例:

新建仓库origin2:git remote add origin2 git @github.com:别名/test
查看仓库:git remote -v
删除仓库origin2:git remote rm origin2


Git命令练习:点我


2017-04-07 施工ing

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容