前言

git是一个版本控制工具, 版本控制主要的好处有三点:

  1. 从当前版本回退到任意版本

  2. 查看历史版本

  3. 对比两个版本差异

git

相关术语

repository  仓库
branch 分支
summary 摘要
track 跟踪
modify 修改
stage 暂存
commit 提交
push 推送
pull 拉取
clone 克隆
amend 修改
merge 合并
conflict 冲突
origin 源
upstream 上游
downstream 下游
verbose 详情
reflog 参照日志
复制代码

git基础

  1. modified: 已修改, 修改了项目但没有提交到本地数据库, 也就是没有git add

  2. staged: 已暂存, 就是执行了git add,但是没有git commit

  3. committed: 已提交, 保存在本地数据库, 就是执行了git commit

git基本工作流程

  • 写代码
  • 对修改的文件进行快照, 保存到暂存区域中
  • 提交代码, 将暂存区域中的文件快照上传到git中

基本配置

查看当前的git配置:

git config --list
git config user.name
git config user.email //通过git config -h了解更多的git配置查询
复制代码

修改当前配置(一般只需要配置一次, 但是如果换了电脑, 或者更换了系统我们就需要从新配置):

//用户名配置
git config --global user.name "xiaohuochai" //邮箱配置
git config --global user.email "121631835@qq.com"
复制代码

项目配置.gitignore

当我们提交项目到git时, 有很多文件是不需要提交的, 比如node_modules, .vscode, .idea等等

这是我们需要在项目的根目录下新建.gitignore文件

node_modules/
/*/node_modules/
.idea
.vscode 复制代码

配置ssh

当我们从github远程服务器pullpush代码时, 如何验证提交和拉取的代码是谁? 为了避免每次输入用户名, 密码的麻烦, 我们可以通过配置ssh来解决。

查看本机的ssh:

//ssh一般存在.ssh中
//打开命令行
cd ~/.ssh //进入对应目录
ls //如果有可以看到私钥id_rsa文件和公钥id_rsa.pub
cat id_rsa.pub 或者 vim id_rsa.pub //查看文件内容
复制代码

如果没有, 我们可以通过下面命令生成

ssh-keygen
复制代码

接下来, 我们复制公钥的内容,登录github

在右上角头像下拉settings -> SSH and GPG Keys中点击 New SSH Key进行添加。

通过ssh -T git@github.com命令来验证SSH是否配置成功。

git基本操作

  • 初始化新仓库
git init
复制代码
  • 查看文件状态
git status
复制代码
  • 文件跟踪
git add xxx         //跟踪某个文件
git add . //批量跟踪
复制代码

文件是否add成功, 我们可以通过git status再检查一次

  • 文件提交本地仓库
git commit              //提交文件到本地仓库
git commit -m 'xxx' //xxx是你本次提交的信息说明
git commit -am 'xxx' //将所有已跟踪的文件暂存起来一并提交
复制代码
  • 推送远程仓库
git push origin xxx
//你可以通过-u指定一个默认的源, 这样以后push就不用加origin
git push -u origin xxx
//以后就可以
git push 复制代码
  • 拉取远程仓库
git pull origin xxx
//可以简写git pull, 如果提示no tracking information, 我们可以通过下面方法建立追踪,后续就可以直接git pull了
git branch --set-upstream branch-name origin/branch-name
复制代码
  • 差异比较
git diff
复制代码
  • 查看提交历史
git log                 //按提交时间列出所有的更新,最近的更新排在最上面
git log --oneline //查看简要的历史记录
git reflog //用来记录每一次命令, 常用来辅助版本切换
复制代码

一次正常的代码提交流程

git pull
git add .
git commit -m 'xxx'
git push
复制代码

git版本切换

有时候业务场景, 或者需求变更等各种因素, 需要我们切换回之前的某个版本。

要进行版本切换, 我们就得知道当前处于哪个版本:

git log --oneline
复制代码

带有HEAD字样的就是我们当前所在版本, 通过git reset --hard id命令切换版本。 id可以是:

- HEAD^ : 上个版本
- HEAD^^: 上上个版本
- HEAD~10: 上10个版本
复制代码

当你切换回上某个版本之后, 通过git log你就看不到最新版本了,这时我们就可以使用git reflog了, 这个命令会按照之前经过的所有的commit路径排列。

git分支管理

我们一般开发都会从master分支分离出dev或者其他开发分支, 用来开发, 这样即使开发出现问题也不会影响主分支。

使用git branch xxx创建一个新的分支。

使用git checkout xxx切换到新的分支

branch, checkout常用命令:

git checkout -b xxx         //可以快速新建并切换到新的分支

git branch -d xxx           //当分支合并到主分支, 这个分支就可以通过-d删除了

git branch -D xxx           //删除那些没有被合并的分支

git branch -a               //查看所有分支
复制代码

分支合并

注意: 分支合并时, 你一定要保证你在要合并到这个分支的目标分支上

使用git merge xxx即可将xxx分支合并到你当前所在的分支。

正常的合并分支很简单, 这样就ok了, 但是分支合并, 如果在不同的分支修改了同一个文件的同一部分, 此时git是无法判断该使用哪个分支的代码的, 这样就会产生冲突,虽然git进行了合并, 但并没有提交, 需要我们解决冲突, 重新提交。

我们可以通过git status查看是哪些文件发生了冲突,然后逐一解决, 当我们把冲突的代码按正确的代码修复后, 需要重新git add, git commit, git push

操作远程仓库

clone远程仓库

通过git clone url来克隆远程仓库

比如:

//这个默认会在你拉取的路径下新建一个blog-mason的文件夹
git clone https://github.com/MasonEast/blog-mason.git //如果你不想要文件夹blog-mason, 你可以这样, 在url后面,空格加新名字
git clone https://github.com/MasonEast/blog-mason.git newName //如果你就想要在当前路径下放项目文件, 不要那个外面的文件夹了, 可以用.
git clone https://github.com/MasonEast/blog-mason.git .
复制代码

查看远程仓库git remote

我们克隆的仓库通过git remote会看到一个叫origin的远程库, 这是git默认标识克隆的原始仓库

通过git remote -vgit remote --verbose我们可以查看到更加详细的信息,即对应的项目地址, 正常会有两个, 但如果你没有push权限的话就只能看到一个fetch的地址。

git remote -v

origin  git@github.com:MasonEast/blog-mason.git (fetch)
origin git@github.com:MasonEast/blog-mason.git (push)
复制代码

删除远程分支

git push origin :xxx
//也可以
git push origin --delete xxx
复制代码

删除远程仓库

git remote rm xxx
复制代码

重命名远程仓库

git remote rename oldName newName
复制代码

关于误操作

git主要用于版本控制, 协同开发, 误操作可以撤销, 但是有的撤销是不可逆的, 我们一定要慎重对待, 不然可能导致部分代码丢失。

修改最后一次提交

场景: 某次提交完后, 发现少提交了文件, 我们需要撤销刚才的提交, 然后重新提交。

git add xxx             //添加少提交的文件到暂存区
git commit --amend //往最后一次提交中追加少提交的文件, 这次提交不会产生记录
复制代码

移除本地仓库的文件

场景: 我们通过git commit将文件提交到本地仓库后, 才想起来把不想提交的文件加进去了。

git rm xxx
复制代码

移除暂存区的文件

场景: 有时候我们习惯性git add ., 但有的文件我们不应该提交, 这时要从暂存区中移除文件。

git reset HEAD xxx      //从暂存区中移除xxx文件
复制代码

后话

上述只是日常工作可能会用到的基本操作,这里做一个小小的整理, 还有很多git进阶学习的命令还没有提到, 比如git stash, git rebase等, 主要是在下也没完全玩明白, 就不好在此提及了。

作者:MasonEast
链接:https://juejin.im/post/5e0f401f6fb9a047f164fc9f
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

关于git你日常工作中会用到的一些东西的更多相关文章

  1. 博主日常工作中使用的shell脚本分享

    前言: 今天给大家分享一篇在我工作中常用的一个shell脚本,里面有一些我们常用到的shell操作.该脚本用于本地电脑和服务器交互上,实现以下功能: 自动拉取自己个人电脑上的源码到服务器上yocto包 ...

  2. Git 日常工作中使用的命令记录

    前言   这篇文章主要是介绍我在使用Git中的有一些忘记了,但是很重要的命令. 20190424 Git 历史信息 username 和 email 更改 git config alias.chang ...

  3. 日常工作中VBA代码积累

    1.超链接地址提取 Function GetURL(rng As Range) As String On Error Resume Next GetURL = rng.Hyperlinks(1).Ad ...

  4. 日常工作中的点滴:C# 根据字节长度截包含中文的字符串

    方法中利用正则表达式判断某个字符是否是中文 public string SubStringB(string text,int length){ int target=0; int b=0; for(i ...

  5. 日常工作中的点滴总结from 2014-03

    一 关于 写方案: 写某个产品的方案基本应包括以下几点: 1产品目前现状(国内外)  2产品意义.作用 3产品架构 4产品优势 5产品功能讲解 二 关于 处理下属工作方向不正确的事务 首先 先肯定 下 ...

  6. 日常工作中使用的一些Mongodb语句

    .通过_userID字段查询重复录入内容 > db.template.aggregate({}}},{$}}) .查询 db.template.find({"group_7ee1247 ...

  7. 程序猿的日常——工作中常用的Shell脚本

    工作当中总是会有很多常用的linux或者命令,这里就做一个总结 文件远程拷贝 如果想把文件从本机拷贝到远程,或者从远程下载文件到本地. # 把本地的jar拷贝到远程机器xxxip的/home/sour ...

  8. 日常工作中常见的mysql优化技巧

    1.介绍一下MYSQL经常使用的优化技巧. MySQL 自带 slow log 的分析工具 mysqldumpslow ,可是没有说明.本文通过分析该脚本,介绍了其用法. slow log 是 MyS ...

  9. 日常工作中 Oracle12c参数的处理:

    1. Oracle12c 修改过的参数 alter system set result_cache_mode=manual; alter system ; alter system set " ...

随机推荐

  1. DevOps - 持续集成

    最近在担任公司部门的DevOps Champion的角色,一直觉得这个只是一个协调者的角色(而不是一个SME的角色),我的工作大概就是将每个项目的devops工具收集一下,然后用图表的形式去体现大家用 ...

  2. 【python】定时锁屏,保护身体

    前言 最近越来越懒,一上班坐到电脑前就不愿意动,不喝水也不起来走动,一下班离开电脑就头晕眼花.想起前两年被肾结石支配的恐惧o(╥﹏╥)o,,,还是写个小工具强制自己喝水防止复发吧.VS Code启动 ...

  3. Hadoop集群搭建(六)~安装JDK

    前面集群的准备工作都做完了,本篇记录安装JDK,版本位1.8 1,在opt目录下创建software和module文件夹:software用来放安装包,module为安装目录 2,把JDK和hadoo ...

  4. libfastcommon总结(二)从文件中加载配置信息

    头文件为ini_file_reader.h 主要接口 IniContext iniContext;//定义配置文件信息 iniLoadFromFile();//加载文件为结构化配置信息    iniG ...

  5. 原生Canvas循环滚动弹幕(现金红包活动带头像弹幕)

    效果 gif有些糊,可以 在线预览 实现关键点 requestAnimationFrame 循环帧: 绘制单条弹幕,画框子 -> 画头像 -> 写黑色的字 -> 写红色的字, mea ...

  6. Docker学习-私有仓库docker-registry的使用

    1.从docker官方仓库下载registry 2.将registry放进容器内 3.在官方下载镜像上传本地仓库 4.私有仓库docker-registry使用的常见问题 5.配置阿里云镜像加速器 假 ...

  7. wr720n v4 折腾笔记(五):终篇-编译安装openwrt附带njit

    前言: 由于没有多余的U盘,所以想直接压缩生成一个带njit-client的openwrt固件.其中按照网上的教程走,遇到了一些问题,这里前面的步骤来源于网络.后面给出处理问题的方法. 一.准备工作 ...

  8. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  9. 性能测试工具Jmeter你所不知道的内幕

    谈到性能测试,大家一定会联想到Jmeter和LoadRunner,这两款工具目前在国内使用的相当广泛,主要原因是Jmeter是开源免费,LoadRunner 11在现网中存在破解版本.商用型性能测试工 ...

  10. python绘图设置标题、标签,无法显示中文

    先说解决办法:在程序开始之前,引入使用的模块之后,添加如下代码: plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unico ...