Git基础

作者: 噫那里有条咸鱼 | 来源:发表于2017-04-05 18:29 被阅读76次


    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

    相关文章

      网友评论

        本文标题:Git基础

        本文链接:https://www.haomeiwen.com/subject/gqntattx.html