📌
notes
  • Introduction
  • Java
    • JavaSE学习
    • 基础
    • 集合
    • 并发
    • JVM
      • GraalVM
    • I/O
    • Java8
    • Java9
    • Java学习常见问题汇总
      • 阿里巴巴Java开发手册
    • 读书和笔记
  • 常用框架
    • Disruptor
    • Guava
    • apache-commons框架
    • Servlet
    • Guice
    • Crypto
    • 字节码框架ASM
    • jOOQ
    • logging框架
    • JSON框架
    • Reflect反射
    • YAML框架
    • XML框架
    • JVM序列化框架
    • String字符串压缩
    • 序列化和反序列化
      • Avro
    • FastDFS
    • Quartz
    • JFinal
    • UUID
    • Objenesis框架
    • Proxy代理
    • Java和Kotlin、Groovy、Scala的代码和相互调用
    • 其他框架
  • MQ消息组件
    • Pulsar
    • RocketMQ
    • Kafka
      • Kafka部署
      • Kafka命令
      • Kafka运维问题
    • Jafka
    • InLong
    • RabbitMQ
    • ActiveMQ
    • OpenMessaging
    • MQTT
    • OpenMQ
    • ZeroMQ
    • HiveMQ
    • HornetQ
    • Artemis
    • Nanomsg
    • 自己做过的消息组件
  • 远程通讯和RPC框架
    • Netty
    • MINA
    • Hession
    • t-io
    • xSocket
    • Grizzly
    • Dubbo
    • gRPC
    • Thrift
    • Finagle
    • Jupiter
    • Motan
    • Tars
    • HSF
    • 自己实现simple RPC
  • CloudNative云原生
    • 容器
    • Docker
    • Kubernetes
    • Istio
    • Pouch
    • 其他
      • Docker镜像站国内网站
  • Reactive响应式编程
    • Reactor
    • ReactiveX
    • WebFlux
    • RSocket
    • Akka
    • Ratpack
  • 架构和设计
    • 设计模式
    • TDD、BDD和DDD
    • 接口幂等性设计
    • 权限设计
  • 分布式
    • 分布式算法
    • 分布式事务与一致性算法
    • 分布式事务框架
    • 常见分布式集群选举机制总结
    • 分布式锁实现
    • 分布式ID
    • 分布式缓存
    • 分布式存储系统
    • 分布式数据库
  • 数据结构与算法
    • 数据结构
      • 数据结构学习
      • 各种树的复杂度和原理
    • 算法
      • 常见算法
      • 递归算法
      • [Top K 之海量数据找出现次数最多或,不重复的](docs/tech/Algorithm/Top K之海量数据找出现次数最多或不重复的.md)
      • 256M的内存如何对16g的数组进行排序
      • 比较两个大文件的重复数据的算法
      • 负载均衡原理、种类和算法
  • 网关
    • API服务网关
      • Zuul2
      • Zuul1
      • Kong
    • 代理服务器
      • Nginx
      • Tengine
      • LittleProxy
      • Apache HTTP
    • 限流熔断
      • Sentinel
      • Resilience4j
      • Eureka
      • SnowJena
  • 模块化和类隔离
    • sofa-jarslink
    • Pandora
    • Java9
    • JarsLink
  • 网络和HTTP
    • HTTP客户端
      • Unirest
      • Feign
      • HttpClient
      • OkHttp
      • http-jersey
      • JDK NIO/BIO
      • HTTP和HTTPS、TCPIP、ajax、OSI七层协议、TCPIP四层协议
      • IP地址分类-内网IP
      • NAT和UDP穿孔打洞、HTTP隧道
      • DNS域名
      • 常用的DNS服务器
  • 缓存和KV数据库
    • Redis
      • Redis运维命令
      • Redis为什么默认16个数据库
      • Redis端口由来和命令前缀PF由来
      • 几款开源的图形化Redis客户端管理软件
      • Redis数据类型
      • Redis线程模型
      • Redis集群规范
      • Redis数据文件解析和内存分析
      • Bitmap介绍
      • Redis集群客户端命令
      • Redis快的秘诀
      • Redis的过期策略和内存淘汰策略
    • Memcached
    • Caffeine
    • JetCache
    • JCache
    • GuavaCache
    • ConcurrentLinkedHashMap
    • EhCache
    • Hazelcast
    • Codis
    • Tair
  • 注册中心和配置中心
    • 注册中心
      • ZooKeeper
      • Nacos
      • Etcd
      • Consul
      • ZKWeb
    • 配置中心
      • Apollo
      • Disconf
      • XDiamond
      • XXL-CONF
  • 系统监控
    • 进程监控
      • Prometheus
      • Zabbix
    • 在线诊断工具
      • JVM SandBox
      • Anthas
      • BTrace
      • Greys-Anatomy
      • HouseMD
  • 数据库
    • 数据库产品
      • MySQL
        • MySQL时区问题
      • Oracle
      • OceanBase
      • MongoDB
    • 数据库操作框架
      • DataSource
      • MyBatis
      • MyBatis-Plus
      • Hibernate
      • ThinkJD
      • JOOQ
    • 数据库中间件
      • MyCat
      • Druid
      • ShardingSphere
      • Zdal
    • 轻量级数据库
      • H2
      • SQLite
      • Derby
      • InfluxDB
    • 数据迁移
      • Yugong
    • Liquibase
    • Otter
    • 数据库工具
      • DataGrip
      • Navicat
      • PL/SQL Developer
      • PL/SQL
  • 大数据处理
    • 流处理
      • Flink
      • JStorm
      • Storm
      • Flume
      • Spark
      • Beam
      • Samza
      • Hadoop
      • HBase
      • druid-io
    • 搜索
      • Elasticsearch
      • Lucene
      • Solr
    • Spider爬虫
      • Jsoup
      • Crawler4j
  • SOFA
    • sofa-rpc
    • sofa-mesh
    • sofa-boot
    • sofa-bolt
    • sofa-ark
    • sofa-jarslink
  • Netflix
    • zuul2
    • zuul1
    • Eureka
    • Hystrix
    • Ribbon
    • Turbine
    • Archaius
    • Governator
  • Micronaut Framework
    • XXX
  • WebService
    • XXX
  • Web应用容器
    • Jetty
    • Tomcat
    • Undertow
    • JBoss
    • Jersey
    • QuickServer
    • WebLogic
    • WebSphere
  • Linux
    • 查看Linux基本属性信息
    • 查看Linux下CPU占用情况
    • 查看LINUX进程内存占用情况
    • 查看Linux下端口占用情况
  • Spring
    • SpringBoot
      • websocket
      • web
      • sqlite
      • mybatis-generator
      • tkmapper
      • swagger
      • webflux
      • starter
      • security
      • kafka
      • cache
      • activemq
      • actuator
      • admin
      • druid
      • jooq
      • kafka
      • multidatasource
    • SpringCloud
      • zuul
      • stream
      • web
      • sleuth
      • example
      • hystrix
      • eureka
      • consul
      • config
    • SpringMVC
      • kafka
      • jooq
      • example
      • annotation
      • activemq
    • SpringData
      • solr
      • redis
      • elasticsearch
  • 测试
    • 单元测试
      • JUnit
      • TestNG
      • Arquillian
    • Mock测试
      • Mockito
      • Spock
      • Moco框架
    • 压力测试
      • JMeter
      • LoadRunner
    • 自动化测试
      • Selenium
    • 基准测试
      • JMH
  • 物联网IoT
  • 运维
    • 日常遇到的问题
  • 操作系统OS
    • Linux
      • 操作系统
      • CPU工作原理
      • Linux环境变量修改
      • Linux用户空间与内核空间、地址空间
      • TCP参数
      • 多进程和多线程的区别
      • 操作系统-内存管理机制
    • MAC
      • MacOS使用
      • Mac软件安装
      • Homebrew
      • Darwin操作系统
      • Kap录屏软件
      • Mac让终端走代理的几种方法
    • Windows
      • Windows介绍
      • Batch批处理-CMD-MS-DOS
  • 其他语言
    • 编程语言
    • Golang
    • Python
    • Lua
    • Erlang
    • Ruby
    • C++/C
    • C#语言
  • 新技术
    • 区块链
      • Ethereum以太坊
      • Bitcoin
      • NFT
    • 机器学习
    • tensorflow
    • 人工智能技术
    • 蚂蚁金服共享智能技术实践:如何降低数据共享的难度
    • 人工智能
    • CloudComputing云计算
    • EdgeComputing边缘计算
    • GraphRAG
  • 前端开发
    • VueJS
    • Angular
    • Bootstrap
    • ECharts
    • RequireJS
    • zTree
    • Layui
    • JavaScript
  • 开发工具
    • 版本控制系统VCS
      • SVN学习
      • Git
        • Git常用命令
        • Git命令学习
        • Github学习
        • GitLab
        • Git-flow
        • Mac通过git统计代码行数
        • 巧用GithubAction同步代码到Gitee
        • 通过Git分支来规范代码上线流程
      • Mercurial
    • Gitbook
    • 集成开发环境IDE
      • IDEA
        • IDEA学习
        • IDEA插件
        • IDEA注释配置
        • IDEA热加载工具JRebel
        • [Mac下IntelliJ IDEA快捷键大全](docs/Tools/IDE/IDEA/Mac下IntelliJ IDEA快捷键大全.md)
      • Eclipse
        • Eclipse快捷键
        • Eclipse插件安装
        • 使用Eclipse进行远程调试
    • Nexus
    • 项目管理
      • Maven
        • Maven中optional和scope元素的使用
      • Gradle
      • Ant
      • Ivy
    • 代码扫描
      • SonarQube
      • PMD
      • FindBugs
      • Checkstyle
    • DevOps工具
      • Jenkins
    • Blog文章笔记写作系统
      • 写文章的模板
      • GitHubPages写博客方法
    • 文件格式
      • Pandoc标记语言转换工具
      • AsciiDoc文件
      • Markdown文件
        • Markdown语法
        • md模板
        • Markdown语法模板
        • Typora模板
  • 技术其他
    • 技术圈的反对种族歧视
    • 系统名词
  • Interview面试
    • 面试学习技术网站
    • 简历和面试
    • 面试指南
    • 备战面试
    • 面经
    • 常见的学习网站
      • 开源组织和公司开源项目地址和网站
      • 框架网站
      • 其他学习网站
      • 待学习
    • 开源项目
  • 读书和笔记
    • Java
      • [Effective Java中文版](docs/Book/Java/Effective Java中文版.md)
      • Java多线程编程核心技术
      • Java编程思想
      • 深入理解Java虚拟机JVM高级特性与最佳实践
      • 码出高效:Java开发手册
      • Java程序性能优化
    • DB数据库
      • 深入浅出MyBatis技术原理与实战
      • 高性能MySQL
    • 网络HTTP
      • 图解HTTP
      • TCPIP详解:卷一
    • Linux
      • 鸟哥的Linux私房菜
    • Netty
      • Netty权威指南
    • Spring
    • Redis
    • Python
      • Python之禅
    • JavaScript
      • JavaScript语言精粹
    • 数据结构算法
      • 大话数据结构
    • 分布式
      • 从PAXOS到ZOOKEEPER分布式一致性原理与实践
    • 并发
      • Java并发编程的艺术
      • Java并发编程之美
      • Java并发编程实战
      • 七周七并发模型
      • 多处理器编程的艺术
    • 架构设计
      • 代码整洁之道
      • 重构
      • 亿级网站架构核心技术
      • 可伸缩服务架构
      • 大型网站技术架构-核心原理与案例分析
      • 大型网站系统与Java中间件实践
      • [Design of Design](docs/Book/架构设计/Design of Design.md)
      • 人月神话-软件项目管理之道
      • 微服务架构设计模式
      • 深入浅出设计模式
      • 面向模式的软件架构
      • 没有银弹-软件工程的本质性与附属性工作
      • 设计模式-可复用面向对象软件的基础
    • Interview面试
      • 剑指Offer
      • 程序员面试宝典
      • 程序员面试金典
    • 技术其他
      • 具体数学
      • 人类网络·社会位置决定命运
      • 性能之巅
      • 浪潮之巅
      • 编写可读代码的艺术
    • 英语
    • 医学
      • 人体使用手册
      • 普通生物学
    • 历史
      • 国史大纲
      • 明朝那些事儿
      • 万历十五年
      • 中国通史
      • 第二次世界大战战史
      • 世界史:从史前到21世纪全球文明的互动
      • 全球通史:从史前史到21世纪
    • 股票
      • 炒股的智慧
    • 其他
      • 上帝掷骰子吗
      • 我不是教你诈
      • 拆掉思维力的墙
      • 最优输运理论专题
      • 说话之道
  • 其他学习
    • 英语
      • 英语学习
      • 英语单词
      • 计算机专业英语
    • 医学
      • 医学常识
      • 腰椎间盘突出治疗
    • 股票
      • 经济名词
      • 股票书籍
    • 历史
      • 中国历史
      • 中国近现代历史
    • 地理
    • 汉语文学
      • 文人
        • 王勃
        • 苏轼
        • 毛泽东诗词
      • 古诗词
        • 满江红·写怀
        • 满江红·登黄鹤楼有感
      • 名言名句
      • 近现代小说
        • 鬼吹灯
      • 三国演义
      • 上帝的指纹
      • 地球编年史
      • 橘子不是唯一的水果
      • 红楼梦
  • 日常常识
    • 搭建梯子VPN
      • VPN的使用
      • V2Ray
      • trojan
      • Shadowsocks影梭
      • SOCKS
      • 内网穿透
    • 电脑组装
      • 电脑DIY
      • CPU和主板
      • 内存和硬盘
      • 帧率FPS和分辨率和像素
    • 硬盘知识
    • 买房购房
    • 收房前预攒钱
    • 汽车
    • 信用卡分类
    • 生活小常识
    • 眼镜
    • 运动健身
    • 游戏Games
      • 常见的游戏
      • 游戏公司
      • 游戏名词
      • 魔兽争霸和魔兽世界
      • 英雄联盟LOL
      • 王者荣耀
    • 影视电影
      • 电影评分网站
      • 美剧
        • 冰与火之歌-权利的游戏
        • 哈利·波特七部
        • 指环王
        • 死亡笔记
      • 动漫
    • 圣经
      • 圣经介绍
    • 神话传说
      • 中国神话传说
      • 佛教
      • 希腊神话
      • 西游记
      • 封神演义
    • 城市介绍
      • 南京
      • 杭州
      • 河南
    • NFC
    • SIM卡的PIN码和PUK码
    • 不可能的物体
    • 中国三大电信公司
    • 八卦和六十四卦
    • 关内、关外、关中、关东
    • 切尔诺贝利核电站爆炸
    • 古代四大文明和七大奇迹
    • 各种单位换算
    • 工作总结和绩效考核
    • 手机OTG功能
    • 方舱医院
    • 移动通信标准和分类
    • 网络流行语
    • 美国常见的公司
    • 美国政治常识
    • 视频处理和图片处理软件
    • 运营知识
    • Google Cloud Platform免费申请
    • 饭圈词汇
    • 常识名词
  • 说明
  • 待办
    • ReadingList
Powered by GitBook
On this page
  • Git下载代码、提交代码、查看记录、查看状态、提交、回滚
  • 本地代码库回滚和远程代码库回滚
  • Git修改和配置用户名和邮箱
  • § git clone § git remote § git fetch § git pull § git push
  • 一、git clone
  • 二、git remote
  • 三、git fetch
  • 或者
  • 四、git pull
  • 等同于下面的命令
  • 五、git push
  • 等同于
  • 或者
  • Git恢复之前版本的两种方法reset、revert
  • Git撤销中间某次提交
  • Git仓库分支(Branch)和标签(Tag)
  • git tag # //在控制台打印出当前仓库的所有标签
  • git tag -l ‘v0.1.*’ # //搜索符合模式的标签
  • git checkout master //切到master
  • git tag v1.00440376 -m "20190424第一版" //tag 自定义版本标识 版本id号 -m "备注“
  • git checkout V1.02 //当前目录全部代码切换到V1.02时的代码
  • git tag -d v1.00 //删除本地标签
  • git push origin :v1.00 //删除git服务器上的标签
  • git push origin V1.00 //将V1.00标签提交到git服务器
  • git push origin --tags # //将本地所有标签一次性提交到git服务器
  • git tag v1.00 440376 -m "20190424第一版" //打标签
  • git push origin V1.00 //标签发布
  • git checkout v1.00 //开始切换版本到v1.00,文件结构会自动更新
  • Git推送tag到服务端
  • Git还原最近一次提交记录
  • Git撤销已经提交到远程服务器的commit
  • Git查看提交记录
  • Git分支操作

Was this helpful?

  1. 开发工具
  2. 版本控制系统VCS
  3. Git

Git命令学习

PreviousGit常用命令NextGithub学习

Last updated 3 years ago

Was this helpful?

  • [一、git clone](#一、git clone)

  • [二、git remote](#二、git remote)

  • [三、git fetch](#三、git fetch)

  • [四、git pull](#四、git pull)

  • [五、git push](#五、git push)


Git下载代码、提交代码、查看记录、查看状态、提交、回滚

Git官网 https://git-scm.com/book/zh/v2

git使用用户名密码clone的方式: git clone http://username:password@remote

eg: username: abc@qq.com, pwd: test, git地址为git@xxx.com/test.git git clone http://abc%40qq.com:test@git@xxx.com/test.git 注意:用户名密码中一定要转义 @符号转码后变成了%40

git clone http://abc%40qq.com:test@git@xxx.com/test.git $HOME/test

使用Git下载指定分支命令为:git clone -b 分支名仓库地址 使用Git下载v.2.8.1分支代码,使用命令:git clone -b v2.8.1 https://git.oschina.net/oschina/android-app.git

更新 git pull <远程主机名> <远程分支名>:<本地分支名> 比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next 上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

提交 git add . git commit -m "add 3 files." // 一次性提交3个文件 git push origin master 上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

查看历史、状态 git log显示历史的提交列表 git show 便可以显示某次提交的修改内容 git show filename 可以显示某次提交的某个内容的修改信息。 git log --author="yangzl"

git status // 查看当前仓库状态(仓库下的工作区文件是否被修改过)

回滚 git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id git push origin :the_branch //删除远程 the_branch

比较版本不同 git diff readme.txt // 查看工作区的readme.txt与缓存区的readme.txt的区别

branch分支查看新建删除

#查看本地都有哪些分支 git branch

#查看所有的分支,包括远程的 git branch -a

#删除本地的某个分支 git branch -D hongchangfirst

#删除远程的分支 git branch -r -d origin/hongchangfirst

【git 删除远程分支】冒号前面的空格不能少,相当于把一个空分支push到server上,等于删除该分支。 git push origin :br (origin 后面有空格)

查看命令帮助 git switch -h git clone -h

参考 https://www.cnblogs.com/chris0710/p/8925977.html https://www.liaoxuefeng.com/wiki/896043488029600/896954074659008


本地代码库回滚和远程代码库回滚

【本地代码库回滚】: git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~3:将最近3次的提交回滚

【远程代码库回滚】: 这个是重点要说的内容,过程比本地回滚要复杂 应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布 原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支

操作步骤: 1、git checkout the_branch 2、git pull 3、git branch the_branch_backup //备份一下这个分支当前的情况 4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id 5、git push origin :the_branch //删除远程 the_branch 6、git push origin the_branch //用回滚后的本地分支重新建立远程分支 7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支


Git修改和配置用户名和邮箱

git修改提交作者和邮箱

用户名和邮箱地址的作用 用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变。 每次commit都会用用户名和邮箱纪录。 github的contributions统计就是按邮箱来统计的。

查看用户名和邮箱地址: $ git config user.name $ git config user.email

$ git config user.name "yangzl" git config user.email "yangzl@XXX.com"

// 或者设置本地项目库配置,进入到仓库的根目录下面执行就可以了 git config user.name "yangzl" git config user.email "youngzil@163.com"

修改用户名和邮箱地址:设置全局 git config --global user.name "yangzl" git config --global user.email "youngzil@163.com"

参考 cnblogs.com/sunshinekevin/p/11617547.html https://blog.csdn.net/cxq2111504104/article/details/102931136 https://blog.csdn.net/diu_brother/article/details/51982993


§ git clone § git remote § git fetch § git pull § git push

一、git clone

远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。

$ git clone <版本库的网址>

比如,克隆jQuery的版本库。

$ git clone https://github.com/jquery/jquery.git

该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

$ git clone <版本库的网址> <本地目录名>

git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。

$ git clone http[s]://example.com/path/to/repo.git/

$ git clone ssh://example.com/path/to/repo.git/

$ git clone git://example.com/path/to/repo.git/

$ git clone /opt/git/project.git

$ git clone file:///opt/git/project.git

$ git clone ftp[s]://example.com/path/to/repo.git/

$ git clone rsync://example.com/path/to/repo.git/

SSH协议还有另一种写法。

$ git clone [user@]example.com:path/to/repo.git/ 通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。各种协议优劣的详细讨论请参考官方文档。


二、git remote

$ git remote origin 使用-v选项,可以参看远程主机的网址。

$ git remote -v origin git@github.com:jquery/jquery.git (fetch) origin git@github.com:jquery/jquery.git (push)

上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。 克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o jQuery https://github.com/jquery/jquery.git

$ git remote jQuery

上面命令表示,克隆的时候,指定远程主机叫做jQuery。 git remote show命令加上主机名,可以查看该主机的详细信息。

$ git remote show <主机名> git remote add命令用于添加远程主机。

$ git remote add <主机名> <网址> git remote rm命令用于删除远程主机。

$ git remote rm <主机名> git remote rename命令用于远程主机的改名。

$ git remote rename <原主机名> <新主机名>


三、git fetch

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

$ git fetch <远程主机名>

上面命令将某个远程主机的更新,全部取回本地。

git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。

默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <远程主机名> <分支名>

比如,取回origin主机的master分支。

$ git fetch origin master

所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取。

git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

$ git branch -r

origin/master

$ git branch -a

  • master

    remotes/origin/master

上面命令表示,本地主机的当前分支是master,远程分支是origin/master。

取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的基础上,创建一个新分支。

此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支。

git checkout 版本号 git reset HEAD

$ git merge origin/master

或者

$ git rebase origin/master

上面命令表示在当前分支上,合并origin/master。


四、git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

$ git fetch origin

$ git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动"追踪"origin/master分支。

Git也允许手动建立追踪关系。

git branch --set-upstream master origin/next

上面命令指定master分支追踪origin/next分支。

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$ git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机"追踪分支"(remote-tracking branch)进行合并。

如果当前分支只有一个追踪分支,连远程主机名都可以省略。

$ git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

如果合并需要采用rebase模式,可以使用--rebase选项。

$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。

但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。

$ git pull -p

等同于下面的命令

$ git fetch --prune origin

$ git fetch -p


五、git push

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

$ git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master

等同于

$ git push origin --delete master

上面命令表示删除origin主机的master分支。

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。

如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push -u origin master

上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

$ git config --global push.default matching

或者

$ git config --global push.default simple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用--all选项。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。

如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。

$ git push --force origin

上面命令使用--force选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force选项。

最后,git push不会推送标签(tag),除非使用--tags选项。

$ git push origin --tags


Git恢复之前版本的两种方法reset、revert

git reset 原理: git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本

  1. 查看版本号: git log

  2. 使用“git reset --hard 目标版本号”命令将版本回退: git reset --hard 目标版本号 git log

  3. 使用“git push -f”提交更改: git push -f【此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧】

git revert 原理: git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。

  1. 查看版本号: git log

2.使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交: git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861 注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名。 git commit -m "revert add text.txt" git log

3.使用“git push”推上远程库: git push

参考 https://blog.csdn.net/yxlshk/article/details/79944535


Git撤销中间某次提交

1、普通的简单提交,直接git revert然后push提交就好了 git revert 100047dcc

2、如果是撤销一个merge的提交, 先查看父commit_id:git log commit_id:比如Merge: 80d8b76f 7b8c0e95 git revert 100047dcc -m 1,参数 -m 就是指定要撤销的那个提价,从左往右,从1开始数;也就是我撤销的是80d8b76f,如果要撤销7b8c0e95,就是-m 2 接着其把代码冲突,然后我就解决冲突,保留主分支的代码,去掉那个人的代码。 然后push提交就好了

参考 https://blog.csdn.net/u013066244/article/details/79920012


Git仓库分支(Branch)和标签(Tag)

标签(Tag)也是属于仓库Repository的

一、tag 标签使用方法

  1. 列出标签

git tag # //在控制台打印出当前仓库的所有标签

git tag -l ‘v0.1.*’ # //搜索符合模式的标签

2 打标签 客户端上操作: #git clone http://admin@ald8.cn:8080/r/ald8.git //先连接下载分支

git checkout master //切到master

git tag v1.00440376 -m "20190424第一版" //tag 自定义版本标识 版本id号 -m "备注“

  1. 切换标签(这个适用于代码回滚或切换到指定标签版本) git checkout [tagname] //与切换分支命令相同

git checkout V1.02 //当前目录全部代码切换到V1.02时的代码

  1. 删除标签 客户端上操作:

git tag -d v1.00 //删除本地标签

git push origin :v1.00 //删除git服务器上的标签

  1. 标签发布

git push origin V1.00 //将V1.00标签提交到git服务器

git push origin --tags # //将本地所有标签一次性提交到git服务器

二、发布和回滚

代码第一次上线发布做版本标签

git tag v1.00 440376 -m "20190424第一版" //打标签

git push origin V1.00 //标签发布

git checkout v1.00 //开始切换版本到v1.00,文件结构会自动更新

第二次上线发布做版本标签git tag V1.01 [root@ald8 www]# cd /data/www/ald8 [root@ald8 ald8]# git tag v1.010a7e9f -m " 20190430" //打标签 [root@ald8 ald8]# git push origin v1.01 //标签发布 [root@ald8 ald8]# cp -rp ald8 ald8.v1.00 //切换版本时先备份,可以应急手动快速回滚第一个版本 [root@ald8 ald8]# git checkout v1.01 //开始切换版本到v1.01,文件结构会自动更新 Previous HEAD position was 440376f... Initial commit HEAD is now at 0a7e9fc... 111

假如第二次发布的版本发现有bug,需要快速回滚到第一版本,这里有两种方式 A . 删除备当前版本目录文件ald8,再将第一版的备份文件ald8.v1.00改名成ald8即可. [root@ald8 /]# rm /data/www/ald8 -rf [root@ald8 /]# mv /data/www/ald8.v1.00 /data/www/ald8

B. 使用git切换版本的功能,直接执行切换命令即可 [root@ald8 /]# cd /data/www/ald8 [root@ald8 ald8]# git checkout v1.00 Previous HEAD position was 0a7e9fc... 111 HEAD is now at 440376f... Initial commit 这样就完成了版本的回滚。

参考 https://blog.csdn.net/iprettydeveloper/article/details/53944125 https://blog.csdn.net/cbuy888/article/details/89497440 https://www.cnblogs.com/senlinyang/p/8527764.html https://blog.csdn.net/jdsjlzx/article/details/98654951


Git推送tag到服务端

将tag同步到远程服务器 git push origin v20201215-RELEASE

推送所有: git push origin --tags

1.push单个tag推送 git push origin [tagname]

2.push所有tag git push --tags 或 git push origin --tags

很早之前,我们就提到过用git tag来给工程打上标签,但是这个命令只是在本地仓库打标签而已,

为了能把标签同步到远程服务器,我们可以这样做:

默认情况下,git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。 1.push单个tag,命令格式为:git push origin [tagname] 例如: git push origin v1.0 #将本地v1.0的tag推送到远端服务器

2.push所有tag,命令格式为:git push [origin] --tags 例如: git push --tags 或 git push origin --tags

以上命令经检验通过,如果不起作用,请在Git控制台上确认你的账号是否有权限推送Tag。这一点很重要,因为这个原因,我有过一段时间很抓狂。

创建Tag git tag -a tagName -m "my tag"

给指定的某个commit号加tag git tag -a v1.2 9fceb02 -m "my tag"

列出已有的tag git tag

#查询远程tags的命令如下: git ls-remote --tags origin

git删除tag git tag -d tagName 删除tag git push origin :refs/tags/tagName 删除远程 git push origin :refs/tags/2020-09-07-RELEASE 删除远程

git tag -d v20201215-RELEASE git push origin :refs/tags/v20201215-RELEASE

tag重命名:先根据已有的tag创建一个新的tag推送到服务器,再删除

把【2020-09-07-RELEASE4】重命名为【v20200907-RELEASE】

git tag v20200907-RELEASE 2020-09-07-RELEASE4 git push origin v20200907-RELEASE

git tag -d 2020-09-07-RELEASE4 git push origin :refs/tags/2020-09-07-RELEASE4

问题场景: 同事A在本地创建tagA并push同步到了远程->同事B在本地拉取了远程tagA(git fetch)->同事A工作需要将远程标签tagA删除->同事B用git fetch同步远端信息,git tag后发现本地仍然记录有tagA

分析:对于远程repository中已经删除了的tag,即使使用git fetch --prune,甚至"git fetch --tags"确保下载所有tags,也不会让其在本地也将其删除的。而且,似乎git目前也没有提供一个直接的命令和参数选项可以删除本地的在远程已经不存在的tag(我目前是没找到有关这类tag问题的git命令~~,有知道的同学可以告知我下,互相进步)。 解决方法:

git tag -l | xargs git tag -d #删除所有本地分支 git fetch origin --prune #从远程拉取所有信息 git branch --contains Tag_V1.0.0 # 看看本地哪个分支包含这个tag/commit

#查询远程tags的命令如下: git ls-remote --tags origin

tag常用git命令: git tag #列出所有tag git tag -l v1.* #列出符合条件的tag(筛选作用) git tag [tag名] #创建轻量tag(无-m标注信息) git tag -a [tag名] #创建含注解的tag

git push origin --tags #推送所有本地tag到远程 git push origin [本地tag名] #推送指定本地tag到远程

git tag -d [本地tag名] #删除本地指定tag git push origin :refs/tags/[远程tag名] #删除远程指定tag

git fetch origin [远程tag名] #拉取远程指定tag git show [tag名] #显示指定tag详细信息


Git还原最近一次提交记录

首先先把本地的代码备份

git stash save 'message...可以添加一些注释'

显示保存进度的列表。也就意味着,git stash命令可以多次执行。

git stash list

版本号可用如下指令查看

git log remotes/origin/master

先在本地回退到需要的版本

git reset --hard 6f2c8c38

强制把本地提交到远端覆盖远端的【必须是自己提交后没有其他人提交】

git push origin master --force

更新代码

git pull

通过git stash pop命令恢复进度后,会删除当前进度。

git stash pop [–index] [stash_id] git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。 git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区) git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的

git stash apply [–index] [stash_id] 除了不删除恢复的进度之外,其余和git stash pop 命令一样。

git stash drop [stash_id] 删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。

git stash clear 删除所有存储的进度。


Git撤销已经提交到远程服务器的commit

0零【可选】、如果需要可以把本地的先暂存起来

git stash save "暂存区名字"

一、使用git log查看需要撤回的commitId

git log

二、撤销:

方式一: //撤销commit,但不修改代码 git reset commitId

方式二: //撤销commit,同时将代码恢复到对应ID的版本 git reset --hard commitId

三、可以把本地的先暂存起来

git stash save "暂存区名字"

四、需要将撤销提交到远程服务器的执行

git push origin HEAD --force

五【可选】、如果执行了第 0零 步,需要还原 在IDEA中最好可以直接使用可视化界面操作

git stash pop命令恢复之前缓存的工作目录 这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。

git stash apply命令,将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝。

参考 https://www.cnblogs.com/pbblogs/p/11922638.html


Git查看提交记录

git log --pretty=format:"%h %s" --graph --all | grep b2caf7f


Git分支操作

查看电脑B本地仓库的分支 git branch

查看本地和远程仓库的所有分支 git branch -a

查看远程仓库的分支(其实用起来还没有直接 git branch -a 查看所有来得清晰) git branch -r

同步远程分支 git fetch 将本地分支与远程保持同步 git checkout -b 本地分支名x origin/远程分支名x 拉取远程分支并同时创建对应的本地分支

首先同步所有远程分支,如下: git branch -r | grep -v '->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

将本地所有分支与远程保持同步 git fetch --all 最后拉取所有分支代码 git pull --all



Git下载代码、提交代码、查看记录、查看状态、提交、回滚
Git修改和配置用户名和邮箱
本地代码库回滚和远程代码库回滚
Git恢复之前版本的两种方法reset、revert
Git撤销中间某次提交
Git仓库分支(Branch)和标签(Tag)
Git推送tag到服务端
Git还原最近一次提交记录
Git撤销已经提交到远程服务器的commit
Git查看提交记录
Git分支操作
廖雪峰的Git教程