浅谈Git

标签: Git

写在前面

老师在最后一节课上强调了git的重要性,谈及git在软件领域 ,版本控制方面的强大作用。

这篇博客就权当git的复习随笔。

助教在开学初提供了git的指导手册,我一直没有细看,今天打开细细品味,还别有一番感觉(吐了,快编不下去了>-<),但是这书真的挺好使。

书中大体先介绍了git的配置和基础,就是一些获取仓库和提交文件至远程仓库的基本指令;接着介绍了git的分支管理以及服务器上的一些秘钥协议之类的第三方托管选择信息。在创建github账号,在本地管理远程仓库的时候,我们需要在gitbash里面输入相关命令获取秘钥填写在GitHub账户个人设置的SSH秘钥这一栏:就是与自己的帐户关联的SSH密钥。这个对应于书中的:服务器上的Git这一节。然后书后面的那些关于自定义Git以及Git内部原理等内容暂时我这水平还用不上,就没有去细看。

Git学习

Git简介

可以说Git是世界上最先进的分布式版本控制系统。

这个工具使用起来可以看见你对工程改动的所有细节,即细致地记录你所有的变动。

大致长这个样子:

在这里插入图片描述

在insights里面可以看见项目版本的网络管理图:

在这里插入图片描述

这不但能自动帮我们记录每次文件的改动,还可以让整个项目的合作者协作编辑,省去了管理文件和传输文件的麻烦。

版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

Git的版本控制大致分为三种:

1. 本地版本控制系统

在这里插入图片描述

2. 集中化的版本控制系统

有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法

在这里插入图片描述

3. 分布式版本控制系统

客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。

在这里插入图片描述

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

Git的基本命令

1. 使用之前先配置身份(即配置本地用户和邮箱):

这是用来上传本地仓库到GitHub中, 在GitHub中显示代码上传者。

输入如下命令进行配置:

$ git config --global user.name "Your Name"

$ git config --global user.email "[email protected]"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

注:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

配置完成后可以使用同样的命令来查看是否配置成功,只需要将最后的名字和邮箱地址去掉即可。 ### 2. 创建仓库

这个是老师给我们建立的一个班级代码仓库,自己有没有操作过,有时间去整一下。

3. 把文件添加到代码仓库:

A.已经有一个班级的代码仓库,我们只需要先克隆到我们本地,在这之前先整一个专门交代码的文件夹,方便管理。

git clone https://github.com/CS

B.准备好待提交的文件,用命令:

$ git add . 

这是告诉Git,把文件添加到仓库(就是本地版的库,并且“.”指当前所有目录及文件)
当然,如果你仅仅是添加一个文件,可以这样写:

$ git add readme.txt

更新一个目录这样写:

$ git add src/

C.用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "一些说明"

git commit命令中,-m后面输入的是本次提交的描述信息,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你多少个文件被改动。

4. git中使用的工作区,暂存区和提交的概念图:

在这里插入图片描述

5. 常用命令

一般提交项目文件操作

    git init
    /* 可以将一个目录转化为git仓库
    创建成功后会出现一个一个隐藏文件夹.git用于存放git信息*/
    
    git add
    /*1.可以将工作区的文件放入暂存区(stage)
    2.可以将未跟踪文件放入已跟踪文件*/

    git commit -m "提交内容"
    /*将所有暂存区里面的修改提交*/

    git status
    /*查看文件状态*/

    git diff 文件名
    /*查看未放入暂存区的修改*/
    
    git diff HEAD -- 文件名
    /*查看工作区文件和版本文件之间修改内容*/

    git log (--prety=oneline)
    /*查看修改日志*/

    git log --graph --pretty=oneline --abbrev-commit
    /*图形化查看分支*/

版本控制

Git的版本控制相当于将不同的提交版本抽象为节点,HEAD指针指指向当前版本的节点,创建新节点,回退,FF模式下的合并只移动HEAD指针,所以非常快。

git reset --hard HEAD~(数字x)
    git reset --hard HEAD^
    git reset --hard HEAD^^
    git reset --hard 版本号(git可以自动补全)
    /*第一个是回退x个版本,第二个是回退一个版本,第三个是回退两个版本
    --hard会清空暂存区,将版本的所有文件放入工作区*/

    git reflog
    /*记录了每一次命令,可以通过这个来找回之前的版本号*/

    git checkout
    /*用当前版本替换工作区中的内容*/

    git checkout -- file
    /*场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时*/

    git reset HEAD file
    /*场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时
    想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作*/

    /*场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节*/

    git rm file
    /*告诉git你真的删掉了一个文件*/

远程仓库
创建SSH-key,并且绑GitHub,id_rsa是私钥,id_rsa.pub是公钥

ssh-keygen -t rsa -C "[email protected]"

Origin是远程仓库的名字,下面添加远程仓库的名字

  git remote add origin [email protected]:用户名/仓库名.git

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
  由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

git push -u origin master

    git push -u origin master -f
    /*使用强制push,这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候*/

从现在起,只要本地作了提交,就可以通过命令:

  git push origin master

把本地master分支的最新修改推送至GitHub。

从远程仓库克隆,下到自己的电脑上作为一个文件夹

git clone [email protected]:用户名/仓库名.git

常用的分支控制命令

git merge dev
    /*现在master分支上,要把dev合并到master分支上来
    git merge --no-ff -m "提交信息" dev
    禁用FF模式,可以添加合并信息*/

    git branch -d dev
    /*删除dev分支,-D 强行删除*/

    git log --graph
    /*分支合并图*/

本文参考链接:
https://git-scm.com/book/zh/v1/起步-关于版本控制

原文链接:加载失败,请重新获取