迅速掌握Git通用指令

速通Git

Git 操作相关内容

初始化仓库

复制代码
mkdir test
cd test
git init

配置本地仓库 name 和 email

你的 gitee 上@后面的就是你的 name,email 就不说了

复制代码
git config user.name ""

git config user.email ""

git config -l
git config --unset user.name

git config --global user.name ""


git config --global user.name ""

git config  --global --unset user.name

查看提交日志

复制代码
git log | git log --pretty=oneline

head -> master master在./git/refs/heads/master

cat ./git/refs/heads/master ->最新的一次commit id ==object的文件名+目录下的一串数字摘要

复制代码
git cat-file -p commitid

示例:

复制代码
yusei@hcss-ecs-d74b:~/linux-for-backend-servers-100-production-proven-rules$ git log --pretty=oneline 
478fe2721e016c145229d670338eb7c1ed7ba24e (HEAD -> master, origin/master, origin/HEAD) 自定义协议网络计算器
6385632a142db57e027b53e622daa866700f794e TCPServer 回调处理命令
56db612ef8a8a7ed84319b288c90eeafbaff2ae1 路由转发服务器
9a10abcf3ac0bc4d678be407cb70f4129a739eb0 Udpserver echo服务器
e0f53844287c421acfbfa278163632512b1674bb 单例模式线程池
667eb2ece4323887c3b0f134bac6982d113a77f7 环形队列的生产消费者模型
16c3327cee3cba58a479daaae030e9192137ddb2 封装条件变量改写阻塞队列
226ae8863ccd2c6947d4b8e3608496af983eee6e 阻塞队列
53b3dbd35674d6881498e87b13c8f5f39b99edce 线程接口认识
900d04f8315fe2e6fba30f7859ab368d177abee5 共享内存
da6012a315f47ab3db002e7aea633e02557e6658 命名管道
43abe095df1adcde3c78e8c06c0b58c58a4d4da9 一个简单的进程池代码
4fcd384d33745be8d8f354cf43554bdfa21a0055 终端也是文件
9fe94090813906c56cfdcd8e312ed439857527c4 Initial commit

yusei@hcss-ecs-d74b:~/linux-for-backend-servers-100-production-proven-rules$ git cat-file -p 478fe2721e016c145229d670338eb7c1ed7ba24e

tree d334c8ac29abaa4f2211fbf759dc11a2b8bc85c1
parent 6385632a142db57e027b53e622daa866700f794e //上一个结点
author Yusei <1466576565@qq.com> 1753735612 +0800
committer Yusei <1466576565@qq.com> 1753735612 +0800

tree目录的数字摘要

查看仓库状态与差异

复制代码
git status 查看仓库状态
git diff file查看暂存区和工作区的区别 -1,+1,2

版本回退

git reset 回退版本库的内容

git log 存储每个版本的数字摘要

git reset回退后,log会被重置

此时如何撤销操作呢,通过git reflog 记录本地的每一次提交指令

git reset 通过git reflog中的数字摘要

版本回退的本质是指针操作实际上是将HEAD指针->master的指向修改

复制代码
git checkout -- file //工作区代码回退

git reset 最新的commit id

撤销的本质目的是不影响远端仓库

删除文件

复制代码
git rm file 删除暂存区和工作区的文件
git commit -m 之后删除版本库的内容

分支管理

主分支就是master分支

HEAD可以指向别的分支,HEAD指向的分支就是当前工作分支

复制代码
git branch 查看当前所有分支
git branch branchname 创建分支
git branch -b branchname 创建新分支并且切换 
git checkout branchname 切换工作分支
git merge branchname 合并分支

fast-farword 直接将master的指向给为merge的最新提交

复制代码
git branch -d branchname  删除分支(不能在当前分支删除当前分支)

合并但是有冲突后,打开冲突文件

HEAD到===是当前工作分支冲突内容,===到dev是要合并的分支冲突内容

复制代码
<<<<HEAD

=====

>>>>>dev

将这个文件要保留的内容保留其他删除就行就可以合并了

复制代码
git log --graph --abbrev-commit 查看多版本下的分支图

git merge --no--ff -m "merge dev2" dev2 不适用fast-forword模式,因为是新的提交必须得带-m提交信息

提交内容还是和fast-forword模式一样但是会多一个-m信息

切换分支工作区的代码,当切换到主分支时能在工作区看到因此在分支通过git stash命令可以可以再./git/refer新建一个stash目录

第一次新建的文件不能被添加到stash中

切换到分支恢复

复制代码
git stash pop;//将stash区的内容恢复到分支

产生冲突应该在分支上不应该在主分支,应该分支合并主分支而不是主分支合并分支,然后主分支再合并分支

只有完成了 git add 和 git commit的分支才可以通过git branch -d删除

否则git 会保护我们的分支

场景如果一个功能在工作区开发了好几天突然被取消

应该使用git merge -D

分布式版本控制器理解

github是一个中央服务器,多个本机推送仓库到github,多个主机拉取仓库到github,多个主机有同样的仓库,分布式!!

远程仓库操作

复制代码
git clone 远程仓库地址

远端仓库名字,通过git remote获取,一般叫:origin

复制代码
git remote -v 查看是否具有push和fetch权限

git clone通过ssh协议,要将本地的公钥添加到远端仓库(gitee上)

git push是本地分支和远端分支的交互

issues:

复制代码
git push(如果本地分支名与远端分支同名可以省略否则增加origin master)

git clone的时候就建立了本地分支与远端分支的联系

远端仓库比本地仓库新时 git pull拉取加合并

.gitignore配置

复制代码
vim .gitignore不想追逐的文件
*.so
*.ini 

忽略so和ini为后缀的文件

复制代码
git add -f b.so强制添加忽略文件

或者添加!b.so忽略.so结尾的文件但不忽略*.so

复制代码
git check-ignore -v c.so 查看c.so为什么被忽略

git命令起别名

复制代码
git config --global alias.st status

此时git st==git status

标签管理

复制代码
git tag 查看所有标签
git tag 标签名 创建标签实则是在refs创建tags
git tag -a v0.8 -m "描述标签信息"

eg: git tag v1.0 对最新一次提交的commit id起别名

复制代码
git show 标签名 查看标签详细信息,git tag只显示标签

git push origin v1.0 将标签推送到远端
git push origin --tags 推送所有标签

git tag -d v1.0删除标签
git push origin :v1.0

git branch -a 查看所有分支包括远端分支,git不支持本地切换到远端分支(本来也不应该)

git checkout -b dev origin/dev 远端分支和本地分支建立联系

git branch --vv 也可以查看联系

多人协作开发

两种方式:

  1. 本地master推送到远端master

    本地分支与远端分支建立联系,包括主分支和dev分支

    push之前首先git pull拉取到最新仓库内容(可能已经有人提交过代码到远端分支上了)

    在分支上合并远端拉取下来的本地主分支,本地主分支合并

    再git push推送到远端仓库的主分支

  2. 远端合并到主分支

    本地分支与远端分支建立联系,包括主分支和dev分支

    push之前首先git pull拉取到最新仓库内容(可能已经有人提交过代码到远端分支上了)

    在分支上合并远端拉取下来的本地主分支

    分支git push推送到远端仓库的分支

    走Pull Request由管理员将主分支合并分支

实战多人合作

是远程master分支新增两个分支,两个分支分别新增新增function 1和function 2分别给开发者1和2

每个功能私有一个分支

本地或远端新建两个分支

本地 git checkout -b branchname新建分支并且切换分支

然后 git push origin

本地解决冲突 远端只进行合并

远端删除分支后,本地仍然会保留远端的分支

复制代码
git remote show origin 显示远端分支,会包含是否stale(是否陈旧)
git remote prune
相关推荐
SelectDB2 分钟前
5000+ 中大型企业首选的 Doris,在稳定性的提升上究竟花了多大的功夫?
大数据·数据库·apache
最初的↘那颗心18 分钟前
Flink Stream API 源码走读 - window 和 sum
大数据·hadoop·flink·源码·实时计算·窗口函数
一只栖枝8 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
qq_3775727711 小时前
git commit - revert + reset + checkout + reorder
git
喂完待续13 小时前
Apache Hudi:数据湖的实时革命
大数据·数据仓库·分布式·架构·apache·数据库架构
青云交13 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
java·大数据·flink·大数据可视化·拥堵预测·城市交通治理·实时热力图
2301_7672332217 小时前
Git使用和理解上的一些问题
git
还是大剑师兰特19 小时前
Flink面试题及详细答案100道(1-20)- 基础概念与架构
大数据·flink·大剑师·flink面试题
水无痕simon20 小时前
5 索引的操作
数据库·elasticsearch