GENGEN
主页
vuepress
  • GIT命令
  • python+django
  • vue cli搭建项目
  • babel es6转换es5
  • docker aliyun配置
  • npm 配置
  • linux 常用命令
  • Ubuntu 下Linux 命令
  • github
  • gitee
  • csdn
  • 关于我
主页
vuepress
  • GIT命令
  • python+django
  • vue cli搭建项目
  • babel es6转换es5
  • docker aliyun配置
  • npm 配置
  • linux 常用命令
  • Ubuntu 下Linux 命令
  • github
  • gitee
  • csdn
  • 关于我
  • java基础

    • JDK8 函数式编程
    • JDK8 新特性之Date-Time
    • Servlet 源码分析
    • ArrayList 源码
    • LinkedList 源码
    • HashMap 源码
    • String 源码
    • BigDecimal 源码
    • java 类的加载
    • Class 源码
    • Synchronized锁升级
    • 事务的传播机制
    • knowledge
  • JAVA WEB

    • Java Servlet
    • 权限设计
    • logback日志的链路追踪
  • DATABASE

    • MySQL EXPLAIN详解
    • MySQL 索引
    • MySQL 表锁、行锁
    • MySQL ACID与transcation
    • 分布式事务
    • MySQL MVCC机制
    • Mysql 乐观锁与悲观锁
    • 分布式锁1 数据库分布式锁
    • 分布式锁2 Redis分布式锁
    • 分布式锁3 ZK分布式锁
  • SpringCloud

    • SpringCloud服务注册中心之Eureka
    • SpringCloud服务注册中心之Zookeeper
    • SpringCloud服务调用之Ribbon
    • SpringCloud服务调用之OpenFeign
    • SpringCloud服务降级之Hystrix
    • SpringCloud服务网关之Gateway
    • SpringCloud Config分布式配置中心
    • SpringCloud服务总线之Bus
    • SpringCloud消息驱动之Stream
    • SpringCloud链路追踪之Sleuth
    • SpringCloud Alibaba Nacos
    • SpringCloud Alibaba Sentinel
  • Spring

    • SpringBoot
    • Spring-data-jpa入门
    • SpringCloud问题
    • dispatcherServlet 源码分析
    • @SpringBootApplication注解内部实现与原理
    • spring启动初始化初始化
  • 中间件

    • 分布式协调服务器Zookeeper
    • 服务治理Dubbo
    • 分布式配置管理平台Apollo
    • 消息中间件框架Kafka
    • 分布式调度平台ElasticJob
    • 可视化分析工具Kibana
    • ElacticSearch 基础
    • ElacticSearch进阶
    • ElacticSearch集成
  • 环境部署

    • 应用容器引擎Docker
    • DockerCompose服务编排
    • 负载均衡Nginx
    • Nginx的安装配置
    • K8S基础
  • 代码片段

    • listener 监听模式
    • spingboot 整合redis
    • XSS过滤
    • profile的使用
    • ConfigurationProperties注解
  • 设计模式

    • 工厂模式
    • 单例模式
    • 装饰者模式
    • 适配器模式
    • 模板方法模式
    • 观察者模式
  • 读书笔记

    • 《Spring in Action 4》 读书笔记
    • 《高性能mysql》 读书笔记
  • NoSQL

    • Redis基础
    • Redis高级
    • Redis集群
    • Redis应用
  • MQ

    • rabbitMQ基础
    • rabbitMQ高级
    • rabbitMQ集群
  • JVM

    • JVM体系架构概述
    • 堆参数调整
    • GC 分代收集算法
    • JVM 垃圾回收器
    • JVM 相关问题
  • JUC

    • JUC总览
    • volatile关键字
    • CAS
    • ABA问题
    • collections包下线程安全的集合类
    • Lock 锁
    • LockSupport
    • AQS
    • Fork/Join分支框架
    • JUC tools
    • BlockingQueue 阻塞队列
    • Executor 线程池
    • CompletableFuture
    • 死锁以及问题定位分析
  • Shell

    • shell命令
    • shell基础
  • Activiti

    • IDEA下的Activiti HelloWord
    • 流程定义的CRUD
    • 流程实例的执行
    • 流程变量
  • VUE

    • vue基础
    • vue router
    • Vuex
    • Axios 跨域
    • dialog 弹出框使用
    • vue 动态刷新页面
    • vue 封装分页组件
    • vue 动态菜单
    • vue 常用传值
  • Solidity 智能合约

    • Solidity 基础
    • Solidity ERC-20
    • Solidity 101
  • English

    • 时态

廖雪峰 GIT教程

git 常用命令

git init 初始化仓库
git add <fileName> add文件
git commit <fileName> -m "commit content" 提交文件
git push 'https://xxx.git' master 推送master

git log 查看提交记录
git reset --hard HEAD^ 回退上一个版本
git reset --hard HEAD~100 回退上100个版本
git reset --hard <版本号> 回退回到某个未来版本
git reflog 查看命令历史
git checkout  --<fileName> 丢弃工作去修改
git rm <fileName> 删除文件(还需要commit)

git reset --soft HEAD^ 撤销上一次commit
git reset --soft HEAD~2 撤销上2次commit

已经push的代码
reset current branch
git push --force

reset几个参数:

--mixed 
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

--soft
不删除工作空间改动代码,撤销commit,不撤销git add . 

--hard
删除工作空间改动代码,撤销commit,撤销git add . 
注意完成这个操作后,就恢复到了上一次的commit状态

顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend

创建分支和合并分支

git checkout -b dev 创建dev分支并切换到dev分支 -b 表示创建并切换,等于 git branch dev + git checkout dev 两条命令
git branch 查看本地分支
git branch -r 查看远程分支
git checkout <分支名> 切换分支
git merge <需要合并的分支名> 合并分支到当前分支 Fast Forword模式

解决冲突思路

1.git merge,先merge两个版本
2.手动解决冲突(git 用<<<<<<< , =======, <<<<<<<标记不同分支的内容,手动选择解决行冲突的地方)
3.然后add、commit提交
4.git log --graph --pretty=oneline --abbrev-commit可以看分支合并情况

分支管理策略no-ff模式

1.通常合并分支,GIT用的是fast forword模式,这种模式下,删除分支后,会丢弃分支信息。
2.git merge --no-f -m "commit content" <分支名>    no ff合并
3.合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
  而fast forward合并就看不出来曾经做过合并。

GIT开发错分支处理

1.代码改了还没提交

git add . (把所有改动暂存) git stash (把暂存的文件提交到git的暂存栈) git checkout 本该提交代码的分支 git stash pop (将暂存栈中的代码放出来)

2.代码改了还提交了

git checkout 不该提交代码提交了代码的分支 git reset HEAD~1 (最近一次提交放回暂存区, 并取消此次提交) git stash (把暂存的文件提交到git的暂存栈) git checkout 该提交代码的分支 git stash pop 等你把代码提交到了正确的分支后,再次切到刚刚错的分支 git push origin 错误的分支 -f (把不该上去的文件回退掉)

bug分支

1.场景:当前dev分支工作未完成,不想要提交代码,但是此时有个bug分支需要你紧急处理
2.git stash 暂存dev目前修改未提交的代码,这时可以切换bug分支进行bug修复
3.bug修复完提交合并,切回dev分支,git stash list命令可查看暂存的工作现场
4.恢复:1.git stash apply 恢复,恢复后stash内容并不删除,你需要git stash drop来删除  2.git stash pop 
  恢复的同时删除暂存
5.如果你有多次暂存,恢复的时候git stash list查看,指定恢复的stash,git stash apply <暂存号>如:stash@{0}

feature分支

1.场景:添加一个实验性新功能,你不希望把主分支搞乱了,这时候最好新建一个feature分支,在上面开发。
2.开发完未合并的情况下,新功能取消,需要删除分支,这时git branch -d <分支名>删除分支会因为未合并失败,更改命令 
  git branch -D <分支名> 强行删除

多人协作

1.远程库clone时,实际GIT是把本地master分支与远程master对应起来了,并且远程库默认名称是origin
2.git remote -v 查看远程库信息,并查看权限
3.推送分支,就是把该分支所有本地提交推送到远程库 git push origin master
4.抓取分支,默认的 git clone 克隆的是master分支,你需要在dev开发,git checkout -b dev origin/dev,
  创建远程origin的dev分支到本地。

多人协作工作模式

1.首先,可以试图用git push origin <branch-name>推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
  如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,
  用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

搭建GIT服务器

1.搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。
2.假设你已经有sudo权限的用户账号,下面,正式开始安装。
    第一步,安装git:sudo apt-get install git
    第二步,创建一个git用户,用来运行git服务: sudo adduser git
    第三步,创建证书登录:收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
    第四步,初始化Git仓库:先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令: sudo git init --bare sample.git
    Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
    $ sudo chown -R git:git sample.git
    第五步,禁用shell登录:出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行git:x:1001:1001:,,,:/home/git:/bin/bash 改为:
    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
    第六步,克隆远程仓库:现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:$ git clone git@server:/srv/sample.git
3.管理公钥:如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
4.权限管理:因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
Last Updated:
Contributors: 88395515