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

推荐阅读更多精彩内容