Git基础教程

1,186 阅读7分钟

目录

1、Git简介

  • Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
  • Git的主要功能有:
    1. 文件备份
    2. 版本管理
    3. 多端共享
    4. 团队合作
  • Git和SVN的区别
    1. Git是分布式的,SVN是集中式
        这是Git和SVN最核心的区别。好处是跟同项目的其他开发人员不会有太多的冲突,自己写的代码放在本地,一段时间后再提交、合并,也可以不用联网在本地提交;
    2. Git把内容按元数据方式存储而SVN是按文件存储
        所有的资源控 制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。
    3. GIT的内容完整性要优于SVN
        GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
    4. 网络依赖性
        Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,SVN却需要联网;
    5. 提交流程
        SVN在Commit前,我们都建议是先Update一下,跟本地的代码比对没问题,并确保开发的功能正常后再提交,如果忘记Updata就Commit,会经常发生错误,耽误开发时间,Git因为多了添加到暂存区的步骤,这种出错情况会少些。   

2、各系统Git安装

2.1 linux系统安装Git

  • 如果是Debian或Ubuntu可以使用下列命令完成Git的安装。
    $ sudo apt-get install git
  • 其他Linux版本,可以直接通过源码安装。先从Git官网git-scm.com/downloads下载源码,然后解压,依次输入下列命令完成Git安装。
    $ ./config
    $ make
    $ sudo make install

2.2 Mac OS系统安装Git

    1. 通过homebrew brew.sh/ 安装
    1. 通过AppStore安装Xcode,Xcode集成了Git,不过默认是没有安装的,选择菜单“Xcode”>“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

2.3 Windows系统安装Git

  • 可以从Git官网直接下载安装程序,按照默认安装即可。安装完成后运行Git Bash,弹出下图窗口表示安装成功。
    windows Git

3、Linux常用命令

  • Git Bash使用的是Linux命令,下面列出了Linux的一些常用命令供大家参考。
    rm -rf 文件夹名     //删除文件夹(慎用!如果不指定文件夹将会删除当前目录下所有文件夹,而且被删除的文件不能恢复!!!)
    rm 文件名           //删除文件
    mkdir 文件夹名      //创建文件夹
    cd 目录名           //改变目录
    cd ../              //返回上级目录
    ls -al              //显示当前目录所有文件(包括隐藏文件)
    touch 文件名        //创建文件
    cat 文件名          //查看文件
    mv 文件名 目标路径  //移动文件
    echo 内容 > 文件名  //输入内容
    echo 内容 >> 文件名 //追加内容
    vi 文件名           //用vi编辑文件
        i               //插入模式
        esc键           //退出编辑模式
        :q!             //强制退出
        :wq             //保存后退出

4、Git分区

  • Git分为工作区、暂存区和版本区
    • 工作区:代码(文件)编辑的地方
    • 暂存区:暂时缓存文件的地方,Git对比SVN来说,SVN中是没有暂存区这个概念,代码直接从工作区提交到版本区,但是这样有不好的地方。在git中,暂存区的作用是:
      • 1.为了避免工作过程中出现的一些误操作,保护工作区和版本区(版本回退和撤销)
      • 2.可以进行分支处理
    • 版本区:本地最终代码存放的地方,从版本区中将文件提交到远程github仓库中
  • 查看文件状态
    $ git status
    
    • 工作区文件为红色
    • 提交到暂存区的文件为绿色
    • 提交到版本区查看文件状态会显示nothing to commit, working tree clean

5、Git初始化

  • 安装完成后需要设置用户名和邮箱
    $ git config --global user.name "YourName"              //设置用户名
    $ git config --global user.email "email@example.com"    //设置邮箱

  如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
  如果要在某个特定的项目中使用其他名字或者电子邮箱,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

  • 初始化Git(创建工作区)
    $ cd d:git          //切换到需要初始化的目录
    $ git init          //初始化
  • 当前目录后面出现(master)就是已经被git管理了,master是默认分支,文件夹里会新建名为.git的隐藏文件夹
    master
    .git
  • 如果要取消当前文件夹被Git管理,删除当前目录下的.git文件夹即可,删除命令(慎用!如果不指定文件夹将会删除当前目录下所有文件夹,而且被删除的文件不能恢复!!!):
    $ rm -rf .git
  • 不要在文件夹里初始化,然后再进子文件夹初始化,因为项目不能嵌套项目。

6、提交文件

-am

    $ git add 文件名                  //将工作区文件提交到暂存区
    $ git add .                       //将工作区全部文件提交到暂存区
    $ git rm --cached 文件名          //删除暂存区文件
    $ git rm --cached . -r            //递归删除暂存区
    $ git commit -m "版本描述"        //提交到版本区
    $ git commit -am "版本描述"       //从工作区直接提交到暂存区和版本区,文件需要提交到暂存区一次
    $ git log                         //查看日志

7、文件比较与版本切换

7.1 文件比较

diff

    $ git diff                        //比较工作区和暂存区
    $ git diff head                   //比较工作区和版本区
    $ git diff --cached               //比较暂存区和版本区

7.2 版本切换

checkout

    $ git checkout .                  //从暂存区将工作区全部覆盖
    $ git checkout 文件名             //从暂存区将工作区指定文件覆盖
    $ git reset HEAD                  //从版本区拉取上一版本到暂存区
    $ git reset --hard 版本号         //版本区变更到指定版本
    $ git reset HEAD^                 //版本区返回到上一版本,有几个^就代表返回上几个版本
    $ git reflog                      //查看所有版本区版本
    $ git log --oneline               //查看版本区日志(单行显示)
    $ git log --graph                 //查看版本区日志(图形化显示)

8、分支

  • 要先提交一次创建主分支,HEAD指针默认指向master分支,每次提交到版本区就被视作为一个节点,在主分支的基础上添加一个分支,在分支上进行提交,最后切换到主分支来合并分支。
  • 如果分支文件没有冲突Git可以自动合并,如果有冲突需要手动删除不想要的保留想要的代码,手动解决完成后再进行commit操作。
    branch
    $ git branch                //查看本地分支
    $ git branch -r             //查看所有远程分支
    $ git branch -a             //查看所有本地和远程分支
    $ git branch 分支名         //创建分支
    $ git checkout 分支名       //切换分支,切换HEAD指针指向
    $ git checkout -b 分支名    //创建并切换分支
    $ git branch -d 分支名      //删除分支,有修改但未合并的分支不能删除
    $ git branch -D 分支名      //强制删除分支,删除分支不能在当前分支里面
    $ git merge 分支名          //合并分支
  • 我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能。

stash

    $ git stash                   //存储最新进度文件,暂存区文件覆盖到工作区
    $ git stash save '暂存说明'   //存储文件附加说明
    $ git stash list              //进度文件列表
    $ git stash pop               //还原最新的进度文件到工作区,并将储存的进度删除
    $ git stash pop --index       //恢复进度到工作区,在储存进度之前工作区提交过暂存区,也将暂存区恢复
    $ git stash pop stash@{1}     //恢复指定的进度到工作区,stash@{1}为进度ID,可以用过git stash list查询
    $ git stash apply             //除了不会删除储存的进度,其他与git stash pop命令相同
    $ git stash apply --index     //除了不会删除储存的进度,其他与git stash pop --index命令相同
    $ git stash apply stash@{1}   //除了不会删除储存的进度,其他与git stash pop stash@{1}命令相同
    $ git stash drop stash@{1}    //删除一个储存的进度。如果不指定id,则默认删除最新的存储进度
    $ git stash clear             //删除所有储存的进度

9、GitHub

9.1 注册登录

  • 访问GitHub主页,输入用户名、邮箱、密码进行登录
    登录
  • 没有账号可以按步骤进行注册
    注册

9.2 远程仓库

  • 创建仓库
    主页
    创建仓库
  • 关联远程仓库
    关联远程仓库
  • 创建一个新项目
    $ makedir test
  • 创建README.md
    $ echo "# test" >> README.md
  • 创建.gitignore文件,如果有不想提交的文件就写在里面
    $ echo "不想提交的文件名" >> .gitignore
  • 初始化
    $ git init
  • 提交项目
    $ git add .
    $ git commit -m "first commit"
  • git不会上传空文件夹,在空文件夹内创建.gitkeep可以上传此空文件夹
  • 关联远程仓库,别名:origin
    $ git remote add origin https://github.com/SainHe/test.git
  • 将master分支推送到远程仓库,第一次写上-u会记录别名和分支名,以后再用一样的参数就可以不用加任何参数使用git push了
    $ git push -u origin master
  • 拉取远程仓库代码至本地
    $ git pull origin master
  • 查看所有远程关联仓库
    $ git remote -v
  • 删除远程关联仓库
    $ git remote rm origin

9.3 发布静态页

  • 在项目中创建一个gh-pages的分支
    git checkout -b gh-pages
    touch index.html
    echo 首页 > index.html
  • 再将gh-pages分支提交到远程仓库
    git add .
    git commit -m "message"
    git push origin gh-pages
  • 在settings找到github-pages找到生成的网址
    settings
    github-pages

9.4 项目拉取到本地

  • 查找要拉取的项目仓库
    git
  • 复制远程仓库地址
    clone
  • 拉取到本地
    $ git clone 远程仓库地址 origin
  • 拉取到本地的文件夹默认就是git仓库而且有origin地址,可以将代码提交到自己的GitHub

9.5 更改别人代码

  • Fork是在当前项目下克隆一份,如果代码更新,不会随之更新
    Fork
  • 进入自己Fork的仓库,点击New pull request将代码请求提交给原作者
    pull
  • 只有Fork关系才能发送pull request请求
  • Pull requests查看别人提交的更改请求

9.6 添加贡献者

  • setting——Collaborators——输入要邀请合作的人点击add collaborator添加贡献者,被添加的人拥有最大权限
    Collaborators

9.7 问题留言

  • 点击Issues,可以就项目的问题给开发者留言
    Issues