Git的使用教程

Git是什么

答:版本控制系统

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

  • 本地版本控制系统(很早之前用的)
  • 集中式版本控制系统(SVN)
  • 分布式版本控制系统(Git)

Git有何优势

  • 速度快
  • 设计原理简单
  • 允许上千个并行分支
  • 分布式系统

Git操作

  1. 初体验

    • 首先在GitHub新建一个项目,并进入到该项目的页面。

    • 切换至SSH协议并得到项目地址

      点击下图所示按钮

      Git的使用教程_第1张图片
      clone.png

此处我们可以看到默认是Clone with HTTPS,如果使用这种方式,以后的每次操作都需要在终端输入用户名和密码。若用SSH协议,则可以避免这种情况。点击Use SSH,之后复制下图所示地址


Git的使用教程_第2张图片
ClonewithSSH.jpg
  • 执行克隆操作

    打开Git Bash,输入git clone [email protected]:NamelessCodeMagician/resume.git

    如果已经设置好公钥私钥,点击回车则会将此项目完整地下载至当前执行命令的目录下。

  • 设置公钥私钥

  • Why

    当时用1SSH协议执行git clone 操作时,GitHub需要判断当前执行操作的用户是否合法,因为并不是所有的用户都有操作权限的,所以我们需要在创建公钥私钥对,将公钥添加至GitHub设置里,将私钥保存至本地。那么当下一次执行操作时,Git则会判断公钥私钥是否匹配,如果匹配,则认为当前用户的操作是合法的。

  • How

    在Git Bash输入ssh-keygen -t rsa -b 4096 -C "[email protected]",双引号内为GitHub邮箱。在创建过程中有一些提示,这时按Enter键即可。最终将在~/.ssh 目录下创建公钥id_rsa.pub和私钥id_rsa。我们可以直接打开id_ras.pub或者用cat ~/.ssh/id_rsa.pub来查看并复制公钥。

    打开GitHub,点击个人头像,进入settings页面,在左侧的Personal settings下有一个SSH and GPG keys 选项,点击它,在右方点击New SSH Key。输入Title,将复制的公钥内容复制到Key下文本框。点击Add SSH key,将公钥添加至GitHub设置。

  1. 本地仓库中文件的三种状态

    • 已提交
      • 该文件已经被安全地保存在本地仓库中了
    • 已修改
      • 修改了某个文件,但是还没有提交保存
    • 已暂存
      • 将已修改的文件放到下次提交时要保存的清单中
  2. 初步操作

    • 初次使用时需要设置姓名和邮箱。Why?因为GItHub上的仓库需要记录每次提交人的姓名和邮箱,如果不设置就不知道是谁提交的。

      设置姓名:git config --global user.name "name"

      设置密码:git config --global user.email [email protected]

    • Clone项目

      用于把GitHub上的项目下载到本地变为本地仓库

      git clone [email protected]:NamelessCodeMagician/resume.git
      cd resume
      
    • 添加文件并提交

      # 创建一个文件
      touch a.md
      # 在文件里写入一个字符串
      echo "hello" > a.md
      # 查看当前文件所处的状态
      git status
      # 将a.md放入暂存区
      git add a.md
      # 将当前目录下的所有新增、添加和删除放入暂存区
      git add .
      # 将暂存区的更新提交到本地库
      git commit -am "我做了些什么事情"
      # 把当前本地库里的改动推送到远程库(origin)的master分支上
      git push origin matser
      
    • 修改文件

      # 把远程仓库的变动更新合并到本地仓库
      git pull
      #修改文件
      vim a.md
      git add .
      # 没有m参数时,会自动进入vim编辑器,我们可以在编辑器内写入我们进行的操作
      git commit -a
      git push origin matser
      
    • 删除文件

      # 删除一个文件夹且没有提示。什么参数都不带则为删除一个文件,-r为删除一个空文件夹,若不为空则提示
      rm -rf a.md
      git add .
      git commit -am "删除a.md"
      #如果之前git push origin master过,后面再进行此操作课简化为git push
      git push
      
  3. Git的复杂操作

    • 本地创建一个git项目推送到远程空仓库

      在GitHub上新建一个空仓库,不勾选Initialize this repository with a README

      #新建一个文件夹
      mkdir newProject
      cd newProject
      #把一个文件夹初始化为一个本地的git仓库
      #仓库和文件夹的区别在意仓库下有一个隐藏的.git文件夹,里面有一些信息
      #对于一个仓库,删除.git文件夹就变成一个普通文件夹了
      git init
      touch index.html
      echo "hello" > index.html
      git add.
      git commit -am "init"
      # 将远程仓库起个名(origin)并保存起来
      git remote add origin url
      # 进行推送,远程仓库地址即是origin
      git push origin master
      
    • 关于git remote

      # 查看本地库里记录的远程库地址
      git remote -v
      # 强制推送,会覆盖别人的代码,慎用
      git push -f origin master
      # 再添加一个远程库的标签
      git remote add gitlab [email protected]...(url)
      # 推送到gilab标签的地址上
      git push gitlab master
      # 删除gitlab标签
      git remote remove gitlab
      #修改origin标签对应的地址
      git remote set-url origin [email protected]...(url)
      #把标签名改为coding
      git remote rename gitlab coding
      
    • 关于分支操作

      作用:可以多人并行开发

      # 查看所有分支
      git branch -a
      # 创建本地库dev分支
      git branch dev
      # 切换到dev分支
      git checkout dev
      touch b.md
      git add .
      git commit -am "add b.md"
      # 推送到origin地址的dev分支上
      git push origin dev
      git checkout master
      # 把dev分支上的内容合并到当前分支(master)上
      git merge dev
      
    • 冲突

      但自己和别人改同一个文件的同一个地方,在执行git pull更新本地合并时会出现冲突。执行git push后查看修改的文件,里面会包含自己添加或修改的内容和别人修改或添加的内容。Git需要你自己把想保留的内容编辑出来,那么此时我们需要做的就是修改此文件并重新提交。

    • 查看与回退命令

      # 查看每次的提交
      git log
      # 将自己的本地仓库回退到指定的commit的id
      git reset --hard commit的id
      # 远成仓库回退,和本地相同(不建议)
      git push -f origin master
      # 将记录回退到指定id,但是本地库文件不会变动
      # 提交后远程库将回退到指定id,但是本地库还是回退前的状态
      git reset --soft commit的id
      # 回退到指定id,
      git revert commit的id
      

      图示:git revert

    Git的使用教程_第3张图片
    revert.jpg

通过git revert 9fa0d1d.....回退到最初初始化的状态。但是commit的记录不会回退,甚至会多一条revert的记录,此时会进入vim编辑器,需要你留下一条message,此处我写的是:revert init。保存退出后可以看到本地库已经回到了初始化也就是commit9fa0d1d917...的状态,然后执行git push 命令推送到远程库即可。

图示git reset --soft commit的id

Git的使用教程_第4张图片
soft.jpg

由上图可以看出,虽然在log中commit的记录已经回退到指定记录了,但是本地仓库的文件还没有回退。it reset --soft commit的id 命令是将指定id之后的本地库已提交状态的文件转为已暂存状态。

git reset --hard commit的id 命令则会将指定id之后本地库的文件清除,提交时使用git push -f 命令,使远程库也回退到指定的以前版本的状态。

你可能感兴趣的:(Git的使用教程)