Git版本控制原理和常用指令说明
平时在Android Studio开发Android项目,习惯了点击右键或图标直接拉新fetch,pull,commit和push。但是必要的时候还得在终端输入命令行。比如正在开发新版本v3.0,老板说上个版本的某个地方操作容易误导客户,需要及时改回来发版。这时就需要创建新的分支2.1,回退到上个稳定版本2.0稳定版本tag进行修改,同时正在开发的版本也需要修改,那么可以通过git cherry -pick <commit id>来进行同步修改。
上了一定年纪,记性不太好(虽然刚毕业一年)。每次只记个大概,实践输入提示:git: 'XXX' is not a git command. See 'git --help' 时,就很懵逼,有点怀疑人生,不得已又开始找度娘。
好了,悠哉够了,就认真记git版本控制的原理和常用指令说明。下次怀疑人生的时候就不要再请教度娘了,自己动手,丰衣足食。
1.GIT版本控制优势介绍
- Git是采用分布式架构。每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。SVN有一个中央服务器,属于集中式。
- Git把内容按元数据方式存储,而SVN是按文件:因为.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,你会发现它们差距很大。
- Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。
- 版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git可以有无限个版本库。或者,更正确的说法,每一个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。
- 回退版本方便。
2.GIT常用操作指令说明
| 指令名称 | 指令说明 |
| git init | 初始化创建本地仓库 |
| git add filename | 添加某个文件 |
| git add | 添加所有修改的文件 |
| git commit -m “提交说明” | 提交当前暂存区的文件 |
| git merge dev | 合并分支 |
| git checkout -b dev | 新建一个dev分支 |
| git branch -D dev | 删除dev分支 |
| git branch | 查看本地分支 |
| git branch -r | 查看远程分支 |
| git fetch origin 远程分支x:本地分支x | 拉取远程分支,需要chenkout进行切换 |
| git push origin --delete dev | 删除远程分支 |
| git status | 查看当前修改状态 |
| git stash |
分支切换前不想带到别的分支,又不想提交脏数据的时候使用 (亲测,亲测偶尔不灵,丢失了好几次TAT,建议最好还是提交了再切换分支) |
| git tag -a v1.0 -m “version 1.0” | 创建了本地一个版本 v1.0 ,并且添加了附注信息 'version 1.0' |
| git tag | 查看标签 |
| git show v1.0 | 查看某个版本的附注 |
| git push origin --tags | tag远程推送 |
| git tag -d v1.0 | 删除本地标签 |
| git push origin:refs/tags/v1.0 | 推送的空的同名版本到线上,达到删除线上版本的目标 |
| git cherry-pick <commit id> | 可以选择某一个分支中的一个或几个commit(s)来进行操作 |
补充说明:git cherry-pick <commit id>
解决冲突后:git cherry-pick --continue
取消cherry-pick:git cherry-pick --abort
git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。
回滚到稳定版本tag:
git tag
git show v2.0
git reset --hard tagId
最近注意github的绿格子,提交了没有显示绿色,原因是设置本地git的uer.name 和user.email可能和github上设置的不一样,改成一样的就可以了。
git config --global user.name yourname
git config --global user.email youremail
Tips: 关联远程仓库的步骤,注意设置user.name 和 user.email和远程仓库中设置的一样,使用ssh秘钥配置关联方式:
git config --global user.name yourname
git config --global user.email youreamil
git config user.name 查看你本地git仓库全局设置的名称
git config user.email 查看你本地git仓库全局设置的邮箱
生成秘钥:复制公钥ssh-key公布出去:
ssh-keygen -t rsa -C "youremail"
Git版本控制原理和常用指令说明的更多相关文章
- Git 版本控制原理
git 工作原理图 如上图所示,有三个区域Working Directory.stage.master. 名词解释: 工作区(Working Directory) 在我们直接编辑文件(文件夹)的根目录 ...
- 使用git的几个常用指令
1. 移除git:rm -rf .git/ 2.查看结果:ls -al 3.语法糖(查看列表):ll 4.将远程库的内容,更新到本地:git pull origin master: 5.添加到本地仓库 ...
- Git 基本知识与常用指令
一.Git代码状态转换图 其中: 未被Git跟踪的状态为unstage状态: 已被Git跟踪的状态为stage状态(stage:阶段),因此包括staging状态和staged状态. untrack ...
- 对git的理解及常用指令
以前总听说git[分布式版本控制系统]自己愣是搞不懂它到底要干哈-什么叫版本控制系统根本理解不了.现在工作需要必须要用到,结果好像就突然懂了git是干什么滴. 所以!原理这个东西的理解是要建立在大量的 ...
- 使用代码管理工具(git)管理代码的常用指令合集
create a new repository on the command line echo "# test" >> README.md git init git ...
- iOS开发——源代码管理——git(分布式版本控制和集中式版本控制对比,git和SVN对比,git常用指令,搭建GitHub远程仓库,搭建oschina远程仓库 )
一.git简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快.最简单.最流行的 git的起源 作者是Linux之父:Linus Bened ...
- git/github常用指令、入门
git的基本常用指令: 1.cd:切换路径 2.mkdir:进入文件夹目录 3.pwd:显示当前目录的路径 4.git init:把当前的目录变成可以管理的git仓库,生成隐藏.git文件 5.git ...
- 【常用指令】git+服务器+数据库
git日程操作 服务器常用操作 ①同步master git pull origin master ②创建分支 git checkout -b 分支名 ③常规操作 git diff git add 文件 ...
- git 详细教程和常用操作指令
git 内部工作原理图 如上图,git 一般可以分为三个区:工作区.暂存区.版本库,通常类似 git add等命令都是与index 暂存区的交互,git commit指令则是 index 与版本库的交 ...
随机推荐
- 12) maven-compiler-plugin
The Compiler Plugin is used to compile the sources of your project. At present the default source se ...
- shell中的重定向(输入输出)
注意:不同版本的Linux会有所区别,不过大同小异 Linux 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设 ...
- 『IOS』 遇到问题记录(长期更新)
遇到的很多问题,解决后都是自己记着,以为不会忘记,之后却会想不起来了. 所以把今后解决的问题记录在这. 一. 在二级页面设置了CAlayer的代理,在返回一级页面报错: EXC_BAD_ACCESS( ...
- Linux系统下ping命令报错 name or service not know
问题描述 CentOS,但是当执行ping命令的时候,提示name or service not known 解决方法 1.添加DNS服务器 vi /etc/resolv.conf 进入编辑模式,增加 ...
- 使用ABP框架踩过的坑系列5
DDD领域驱动开发,实际是为复杂的业务场景而生的,为了让开发人员专注于业务,而操作系统.数据库.网络之类的技术细节,必须要持久透明化:实际就是数据库系统DBMS的ORM抽象,目标就是业务不需要考虑数据 ...
- [招聘] 上海耐斯特数字招聘3D图形软件工程师
公司介绍 上海耐斯特数字科技有限公司成立于2018年9月,致力于为中国原创动画.影视行业提供新一代核心技术解决方案和全流程技术服务.公司创始团队拥有国内外领先的行业背景与资源,在DCC软件开发方面具有 ...
- netty网络通信中的tcp拆包问题
工作中的一个项目,我们的一个应用与银行系统进行tcp通信的时候,银行下送的报文有时会分多次返回.在tcp中这种数据包分多次小数据包发送的情况成为拆包问题. 其中一个,也是最常见的思路就是在报文的报文头 ...
- cpu缓存java性能问题初探
在内存与cpu寄存器之间,还有一块区域叫做cpu高速缓存,即我们常常说的cache. cache分为L1.L2.L3三级缓存,速度递减,离cpu越来越远,L1.L2每个内核自己都有,L3是每个插槽上的 ...
- 646. Maximum Length of Pair Chain
You are given n pairs of numbers. In every pair, the first number is always smaller than the second ...
- Python 将时间戳转换为本地时间并进行格式化
在python中,时间戳默认是为格林威治时间,而我们为东八区 使用localtime() 本地化时间戳 使用 strftime() 格式化时间戳 time = time.strftime('%Y%m% ...