基础入门-Git

从0开始学git

既然要记录整个devops的学习与实践过程,那么git是不得不学的。 记得刚毕业那会,我也会使用git。大学期间做项目。也会使用SVN。

那时候,认识还比较浅显。觉得他们两个都差不多,用来多人协同开发的。每天我只需要,推代码和拉取代码就可以了。还特别害怕又代码冲突。因为不好解决。虽然吭哧吭哧也解决了。回想以前,还真是听菜鸟的。

认识版本控制

什么是版本控制?

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。(百度百科)

版本控制的常用工具:SVN、Git

Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。(所以下面使用windows安装的git的时候,通过git bash可以使用shell命令访问我们电脑的所有文件和目录)

SVN

是一个集中式的版本控制系统,通过单一的服务器存储所有文件修订版本的方式。所有客户端连接该服务器,取出文件或者更新的内容文件。

Git与SVN的区别

  • Git是分布式的,SVN不是
  • Git通过元数据存储文件,Git内容存储通过哈希算法(SHA-1),这样可以确保内容的完整性。SVN是按文件进行存储
  • Git没有一个全局的版本号,而SVN有
  • 分支概念不同,SVN是版本的另一个目录(比较占资源),Git的分支是指向提交的commitId的指针
说一下SVN集中式与GIT分布式

在这里插入图片描述

集中式:指的是存在服务端和客户端。服务端充当中央代码库。客户端从服务端中获取代码。

分布式:Git的分布式,没有服务端和客户端之分,所谓的服务端就是安装了Git的服务器。因此就没有服务端和客户端之分。

Git学习

基本概念

  • 工作区: 就是我们安装在电脑上,能清晰的看到的目录。目录中能看到具体的文件内容,可以进行编辑、删除等等操作。

  • 暂存区: 暂存区,英文就是stage或者index。存在工作区目录下".git"下的index文件中

  • 版本库: 工作区目录下".git"目录不属于工作区,而是Git的版本库
    在这里插入图片描述

安装Git

使用Git之前,需要先安装Git。

Git各平台安装包下载地址: http://git-scm.com/downloads

玩转Git命令

一、Git的相关配置

  1. 配置全局账户,也就是你这台服务器所有的Git仓库,对此账户都有效
git config --global user.name '账户名称'
git config  --global user.email ‘账户Email’
  1. 配置局部账户,也就是这个账户,只对当前仓库,有效
git config --local user.name '账户名称'
git config --local user.email '账户Email'

注意:一个仓库同时配置了global,则仓库有限使用本地设置。

  1. 查看相关配置

    查看配置是否该生效

git config --global --list
==or
git config --local --list

二、本地基本操作

这部分也是我工作中使用比较多的命令

1. 基本操作
  1. 查看变更情况
git status
  1. 查看当前分支属于哪个分支
git branch -v
  1. 切换到指定分支
git checkout 'branchname'
  1. 把当前目录以及子目录下所有的变更都添加到暂存区
git add .
  1. 把仓库内所有的变更都加入到暂存区
git add -A
  1. 把指定的文件添加到暂存区
git add 文件1 文件2 ...文件n
  1. 创建正式的commit,也就是把当前的数据从暂存区提交到版本库(记住文件变更需要先提交到暂存区,才能进行版本库的提交)
git commit -m "message" 
2. 比较差异
  1. 比较某文件工作区与暂存区的差异
git diff 某文件
  1. 比较某文件暂存区与HEAD差异
git diff --cached 某文件
  1. 比较工作区和暂存区的所有差异
git diff
  1. 比较暂存区和HEAD的所有差异
git diff --cached
  1. 用difftool工具比较任意两个commit之间的差异
git difftool commit1 commit2 
3. 暂存区和工作区之间的回滚
  1. 把工作区指定的文件恢复到和暂存区一样
git checkout 文件1 文件2 ... 文件n
  1. 把暂存区指定文件恢复到和HEAD一样
git reset 文件1 文件2 ... 文件n
  1. 把暂存区和工作区所有的文件恢复到和HEAD一样
git reset --HEAD
4. 查看哪些文件没有被git管控
git ls-files --others

三、 加塞临时任务

  1. 把未处理完的变更先保存到stash中
git stash
  1. 临时任务处理完后继续之前的工作
git stash pop 
或者
git stash apply
  1. 查看所有的stash
git stash list
  1. 取回某次的stash的变更
git stash pop stash @{数字}

四、 修改个人分支历史

  1. 修改最后一次commit
git add 
git commit --amend
  1. 修改中间的commit(某一次的)
1. git rebase -i X前面的一个commit的id
2. 在工作区修改文件
3. git add 
4. git rebase --contiue

五、 查看变更日志

  1. 当前分支所有信息
git log 
  1. 当前分支最近的n条commit信息
git log -n 
  1. 用图形显示所有分支的提交历史
git log --all --graph  
  1. 查看某个文件的的提交历史
git log 某文件 
如果觉得展示信息太多,可以展示一行
git log  --oneline
  1. 某个文件各行最后修改对应的commit以及作者
git blame 某文件

六、 分支与标签

1. 创建分支
  1. 基于当前分支创建新分支
git branch 新分支
  1. 基于指定分支创建新分支
git branch 新分支 已有分支
  1. 基于某一个commit创建分支
git branch 新分支  某个commit的id
  1. 创建分支并切换分支
git checkout -b 新分支
2. 列出分支
  1. 列出本地分支
git branch -v
  1. 列出本地和远端分支
git branch -av
  1. 列出远端所有分支
git branch -rv
  1. 列出名称符号某样式的远端分支
git branch -rv -l '某样式'
3. 删除分支
  1. 安全删除本地分支
git branch -d 分支名
  1. 强行删除本地分支
git branch -D 分支名
  1. 删除已经合并到master分支的所有本地分支 (就是筛选出所有的合并到master上的分支除去*或者master分支,然后逐一删除)
git branch --merged master | grep -v '^\*\|master' | xargs -n 1 git branch -d 
  1. 删除远端origin已经不存在的所有本地分支
git remote prune origin

4. 创建标签

  1. 在具体的commit的上创建标签
git tag 标签名 commit_id

七、 两个分支之前的合并集成

  1. 把A分支合并到当前分支,且为该合并创建一个commit
git merge A分支
  1. 把A分支合并到B分支,且为该合并创建一个commit
git merge A分支 B分支
  1. 把当前分支基于B分支做 rebase 以便把B分支合入到当前分支
git rebase B分支
  1. 把A分支基于B分支做rebase,以便把B分支合并到A分支
git rebase B分支 A分支
  1. 用mergetool解决冲突
git mergetool

八、 和远端进行交互

  1. 列出所有的remote
git remote -v
  1. 增加remote
git remote add url地址
  1. 删除remote
git remote remove remote名称
  1. 改变remote的name
git remote rename 旧名称  新名称
  1. 把远端所有分支和标签的变更都拉取到本地
git fetch remote
  1. 把远端所有分支变更到本地,且merge到本地分支
git pull remote名称 分支名称
  1. 把本地分支push到远端
git push -u remote名称 分支名称
  1. 删除远端分支
git push remote --delete 远端分支名称
or
git push remote:远端分支名称
  1. 向远端分支提交指定的标签
git push remote  标签名称
  1. 向远端分支提交所有的标签
git push remote --tags

九、 常见的回滚操作系统

1. 未执行commit之前
  1. 如果文件修改了,但是还没有添加到暂存区,也就是还没有执行git add操作,则可以使用checkout来回滚
git checkout -- filename
  1. 如果已经添加了暂存区,则可以用reset来撤销
git reset HEAD filename
2. 执行了commit之后
  1. 使用revert来撤销某次提交
git revert commitID
  1. 使用reset直接回滚到某个版本,回滚之后,该commit_id之后的内容全没有了,且不可追回
git reset --hard commitID

写在最后:

会持续更新git相关命令,Git命令还是很多的,需要多使用多练习。当然单单会命令还不行。理解原理,对命令的掌握和理解有很大的帮助。也会慢慢更新相关的原理文章。期待自己,也期待读者从本质上读懂git

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值