Git
git版本控制工具
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
Git与另一个版本控制系统有如下区别:
- Git是分布式的,SVN不是。
- Git把内容按元数据方式存储,而SVN是按文件。
- Git分支和SVN分支不同。
- Git没有一个全局的版本号,而SVN有。
- Git的内容完整性要优于SVN。
工作流程
首先要了解到Git分为几个区域,有工作区、暂存区、版本库、远程仓库。然后在后边会解释项目在各个区域移动。
单人工作比较简单,主要是重复的修改和提交,多用于个人项目。
- 初始化仓库;
- 现在就处于工作区,可以在项目中进行修改;
- 然后将更改提交到暂存区;
- 将更改从暂存区提交到本地仓库(版本库);
- 再将代码推到远程仓库。
多人合作的话,每个人创建分支,在自己的分支上写代码,最后将分支合并。使用分支并不会影响开发主线的工作。
开发中经常使用的Git命令
1、配置Git
git config
在使用Git之前。需要配置Git。主要配置的就是用户名和邮箱。然后再查看配置列表。
git config --global user.name <name>
git config --global user.email <email>
git config -l
然后就可以开始使用了。
2、初始化Git仓库
git init
该命令会在当前文件目录下初始化一个Git仓库并且生成一个.git
目录。或者直接在github克隆一个仓库,使用如下命令。
git clone <repo>
3、添加到暂存区
git add <file>
将修改过的文件添加到暂存区,使用git add .
或git add -A
将所有更改的文件添加到暂存区。
删除文件可以使用git rm
命令,只能删除工作区与暂存区的文件。如果想只删除暂存区的文件git rm --cached <file>
。
查看工作区的状态使用git status
命令,查看未添加的文件。
查看暂存区中的文件使用git ls-files
命令。
4、提交到本地仓库
git commit
在提交的时候需要添加提交信息git commit -m <message>
,如此以来就知道每次提交做了什么更改。
在此时,已经使用过工作区、暂存区和本地仓库了。我们可以查看不同区的不同。
- 显示工作区与暂存区的不同:
git diff
- 显示暂存区与本地仓库的不同:
git diff --cached
- 显示三者的不同:
git diff HEAD
- 仅显示改变的文件:
git diff --name-only
- 显示两次提交的差异:
git diff <commit> <commit>
5、远程仓库
git remote
将代码提交到远程仓库之前需要建立连接。使用以下命令对远程仓库进行操作:
-
添加远程仓库并命名为origin:
git remote add origin <git-repo>
-
修改远程仓库:
git remote set-url origin <git-repo
-
删除远程仓库:
git remote rm origin
-
列出所有的远程仓库:
git remote -v
然后就可以推送到远程仓库了,其中origin是远程仓库,master是分支:
-
推送到远程仓库并建立追踪关系:
git push -u origin master
-
推送到远程仓库:
git push origin master
6、分支
分支绝对是Git中的核心概念。Git保存的不是文件的变化或差异,而是一系列不同时刻的快照。
分支创建
git branch <branch>
分支的其他操作:
-
从远程仓库拉取文件:
git pull origin master
-
列出本地分支:
git branch
-
列出本地分支与追踪关系:
git branch -vv
-
列出远程分支:
git branch -r
-
列出所有分支:
git branch -a
-
删除已被合并的分支:
git branch -d <branch>
-
强制删除未被合并的分支:
git branch -D <branch>
-
更改分支名字:
git branch -m <newbranch>
-
设置追踪分支:
git branch -u <upstream>
-
切换分支:
git checkout <branch>
-
建立分支并切换工作区:
git checkout -b <branch>
-
切换到最近一次分支:
git checkout -
-
建立无任何提交历史的分支:
git checkout --orphan <branch>
-
合并develop分支到本分支:
git merge develop
-
合并最近切换分支:
git merge -
日志和标签
-
显示提交日志:
git log
-
以图表的形式显示提交日志:
git log --graph --all --online --decorate
-
列出所有标签并显示标签信息:
git tag -ln
-
在某个commit上添加一个标签:
git tag v0.1 <commit>
-
删除一个标签:
git tag -d v0.1
- 动手实现MVC: 1. Java 扫描并加载包路径下class文件
- 动手实现MVC: 2. bean加载, IoC依赖注入
- Python编写渗透工具学习笔记一 | 0x04 nmap实现端口扫描(准确性更高)
- spring-boot & ffmpeg 搭建一个音频转码服务
- java 实现二维码生成工具类
- WriteUp分享 | CTF-web
- 机器学习的Boosting技术(以AdaBoost为例)
- 10.25 systemd管理服务
- JS基础知识之new操作符 | 前端卧谈会第9期
- 利用通用伪造签名绕过ElGamal
- 10.24 chkconfig工具
- SPI框架实现之旅一:背景介绍
- 10.23 linux任务计划cron
- Linux基础(day35)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Phenotype : 大规模表型数据处理工具
- 聊聊dubbo-go的registryAwareCluster
- 老伙计,关于JDK并发包,这些不为人知的秘密你知道多少?
- 不能错过的分布式ID生成器(Leaf ),好用的一批
- 微信小程序开发实战(20):TabBar导航
- 饿了么备注输入框-不吃辣-少放辣-多放辣-不吃蒜-不吃香菜等
- From High Ceph Latency to Kernel Patch with eBPF/BCC
- JConsole、VisualVM 依赖的 JMX 技术到底是什么
- DHCP 中继实验
- 【NBA 可视化】使用Pyecharts实现湖人19-20赛季投篮数据可视化~
- 微信小程序开发实战(18):地图组件
- 教你几招,快速创建 MySQL 五百万级数据,愉快的学习各种优化技巧
- 【Pyecharts】2014-2019年高考数据可视化~
- 25.Python的循环与递归
- 26.Python文件内容的迭代