Git 工作原理以及常用命令操作
GIT工作原理
要了解GIT工作原理,先了解GIT的这几块区域:
工作区域划分
工作区:指的是本地工作空间,如果刚拉取下来的代码,没有修改的内容,这块区域是空白的 (modified-已修改状态)
暂存区:将改动内容进行暂存 (staged-已暂存状态)
HEAD:HEAD指针,当前指向的分支
本地版本库:(commited-已提交状态)
远程仓库:push操作后,将本地版本库推送到远程仓库
工作流程
- 在工作区中修改文件。(modified)
- 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。(staged)
- 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。(commited)
开发最常用的五个命令
1、git clone projectUrl 拉取远程仓库代码到本地,projectUrl是一个具体的git仓库地址路径
2、git add 将工作区的修改的内容添加到暂存区
3、git commit 将暂存区域的的内容提交到HEAD所在的分支
4、git pull 拉取远程分支内容到本地
5、git push 将HEAD分支内容推送到远程分支上面
GIT常用命令
git clone http://127.0.0.1:9090/root/spring-demo-devops.git // clone 远程仓库代码到本地计算机
git status // 查看文件的状态
Changes not staged for commit;
这段信息提示我有修改的信息没有提交到暂存区,建议使用git add 命令进行添加到暂存区域,或者使用git checkout 命令放弃工作区的修改
Untracked files:
表示这些文件是新建的,还没有纳入git的管理,建议使用git add 命令将这些文件纳入git管理
git status -s // 查看状态,比较简短的信息展示
红色M:表示有改动的文件,还没有添加到暂存区
绿色M:表示已添加到暂存区的文件
??:表示还没有纳入git管理的文件
A:表示刚纳入git管理的文件
U:表示有冲突的文件
git add .
git add Test.java
1、将未跟踪的文件纳入git的管理
2、将已纳入git管理的文件的改动添加到暂存区域
3、冲突解决后,标记冲突已经解决
git commit -m "提交commit,并且编写注释" // 提交并且注释
git commit --amend // 修改已经提交的注释
git log //查看已有的commit
git log --pretty=oneline Test.java // 查找某个文件的commit变更历史
git log -p -1 // 显示最近一次commit的修改信息
git log --stat // 显示commit的文件修改统计信息。
git log --grep "Test" // 查找注释信息包好test的commit的信息
git cherrry-pick 19ed20582a5fe0dc8a5da3bc1cb0a9c0ef663346 // 将ID为19ed20582a5fe0dc8a5da3bc1cb0a9c0ef663346 的commit合并到当前分支
git reset --hard FETCH_HEAD //放弃本地commt
这个操作,用于自己本地的操作没有提交到远程分支
git remote rename aaa bbb //将远程仓库aaa 重命名为 bbb
git remote remove bbb //移除远程仓库bbb
git remote show origin // 查看远程仓库的信息
1、可以展示远程仓库的简写(origin)和URL(https://github.com/mybatis/mybatis-3.git),
2、远程分支有那些,3.2.x 、3.3.x ……
3、执行git pull的时候远程分支master将会拉取到本地和本地的master进行合并
4、执行git push的时候将会本地master分支推送到远程master分支上面
git remote // 查看仓库的简写
远程仓库的简写为origin
git remote -v // 查看仓库的简写以及对应的URL
1、 简写为origin
2、URL为:https://github.com/mybatis/mybatis-3.git
git remote prune origin // 同步远程已经删除的分支,使用场景:发起分支合并请求,合并完成之后远程删除了哪个分支,
git remote update origin -p // 更新远程分支列表
gitk --all // 查看项目分叉历史图
git log --oneline --decorate --graph --all //显示项目分叉信息
git checkout -b develop // 增加并切换到develop分支,使用场景:一般用于拉分支开发新需求,或者拉分支修复bug
git push -u origin develop // 推送develop分支到远程仓库
git push origin :develop // 删除远程develop分支
远程分支删除了,但是本地分支还有的,所以本地分支也要删除
git branch -D develop // 删除本地develop分支
删除本地分支的时候需要HEAD指针不是要删除的分支。
git merge 2.8.0-zd // 将2.8.0-zd分支合并到当前分支,这是基于本地分支进行操作,需要先 pull最新代码
新建了develop分支,然后修改了一个readme文件,然后将分支合并master分支
git tag -a 3.2.8-RELEASE -m '版本3.2.8-RELEASE' // 创建本地tag
需要注意的是,这里执行完之后,不会有任何的显示信息,要去git tag 查询是否创建成功
git tag // 查看有哪些tag
可以看到已经创建成功了tag,但是没有显示任何的备注信息,可以使用git show 查询下备注信息
git show 3.2.8-RELEASE // 要显示附注信息,我们需要用 show 指令来查看
可以显示注释信息,已经变化的内容,这个时候这个tag只是在本地,不在远程仓库的,需要推送到远程库去
git push origin 3.2.8-RELEASE // 推送tag:3.2.8-RELEASE到远程代码库
git push origin --tags // 推送本地的所有tag到远程仓库
git tag -d 3.2.8-RELEASE //删除本地tag
本地的tag删除了,但是远程还有的,需要删除远程的tag
git push origin :refs/tags/3.2.8-RELEASE // 删除远程tag
git push origin --delete 3.2.8-RELEASE // 删除远程tag
git fetch origin tag 3.2.8-RELEASE // 拉取远程tag到本地
别人打了tag,或者在gitlab界面上面打了tag,拉取到本地
git checkout 3.2.8-RELEASE // 检出3.2.8-RELEASE内容,仅限于查看
其他常用场景操作
记住用户名和密码:
git config --global credential.helper store
执行后,只要输入一次就行了
合并时忽略某文件
1、在项目跟目录下面新建文件.gitattributes
2、文件中添加 pom.xml merge=ours 配置
3、执行命令进行配置,git config merge.ours.driver true
执行完成以上步骤,merge的时候就不会把pom.xml的变更合并过来了
在develop分支拉取分支用来修复bug
git checkout develop // 切换到develop分支
git checkout -b bugfix // 基于develop分支拉取一个分支bugfix 并切换到该分支
git push -u origin bugfix //推送bugfix分支到远程服务器上面
然后发起请求合并,等待管理人员进行代码合并
基于tag:3.2.8-RELEASE拉取分支修复bug,然后发布3.2.9-RELEASE版本
git checkout 3.2.8-RELEASE
git checkout -b bugfix
git push -u origin bugfix
git tag -a 3.2.9-RELEASE -m ' 版本3.2.9-RELEASE'
git push origin 3.2.9-RELEASE
develop分支需要上测试环境,基于develop分支打一个tag
git tag -a 3.2.8-RELEASE -m ' 版本3.2.8-RELEASE'
git push origin 3.2.8-RELEASE
某些文件不想纳入git管理,新建.gitignore文件,添加以下内容 # 忽略所有的 .settings 文件
.settings/ # 只忽略当前目录下的 Test 文件,而不忽略 subdir/Test
/Test # 忽略任何目录下名为 target 的文件夹
target/ # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
初始项目推送到git仓库 git init // 创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件 git add . // 标识那些文件要放到git仓库进行追踪记录 git commit -m "first commit" //提交到暂存区域 git remote add origin http://127.0.0.1:3000/qq/sssss.git //推送到远程git远程服务器上面 git push -u origin master 推送master分支到远程 git clone http://127.0.0.1:4000/qq/sssss.git // 将git服务器上面的远程项目拉取下来。包含所有的分支和tag代码信息
Git 工作原理以及常用命令操作的更多相关文章
- git详情、git工作流程、常用命令、忽略文件、分支操作、gitee远程仓库使用
今日内容概要 git详情 git工作流程 git常用命令 过滤文件 分支操作 git远程仓库使用 可参照:https://www.cnblogs.com/liuqingzheng/p/15328319 ...
- git基础入门之常用命令操作
本内容参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 初学,有什么不对的地方 ...
- 图解git中的最常用命令
图解git中的最常用命令 Git命令参考手册(文本版) git init # 初始化本地git仓库(创 ...
- 图解 Git 工作原理
此页图解 git 中的最常用命令.如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻. 基本用法 上面的四条命令在工作目录.暂存目录(也叫做索引)和仓库之间复制文件. git add fil ...
- Docker系列之常用命令操作手册
目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...
- git日常使用的常用命令总结
git日常使用的常用命令总结 git 是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常 ...
- Android ADB原理及常用命令
Android调试桥(ADB, Android Debug Bridge)是一个Android命令行工具,包含在SDK 平台工具包中,adb可以用于连接Android设备,或者模拟器,实现对设备的控制 ...
- Jedis对Redis的常用命令操作
本篇主要总结一些Jedis对Redis的常用命令操作: 1.对key操作命令 2.对String操作命令 3.对List操作命令 4.对Set操作命令 5.对Hash操作命令 6.排序操作指令 一.项 ...
- K8s常用命令操作
K8s常用命令操作 一.kubectl命令补全 1.master安装命令补全,并临时生效 yum install -y bash-completion source /usr/share/bash-c ...
随机推荐
- day02-业务服务监控
提供大量第三方工具,可以开发企业级服务监控平台,本章涉及文件与目录差异对比.HTTP质量监控.邮件告警等内容一.文件内容差异比对1.示例1 d = difflib.Differ() diff = d. ...
- js替换div里的内容
<!DOCTYPE html><html><head><meta charset="utf-8"><title>< ...
- 来看看面试必问的HashMap,一次彻底帮你搞定HashMap源码
HashMap结构 数组+链表+红黑树 链表大于8转红黑树,红黑树节点数小于6退回链表. 存放的key-value的Node节点 static class Node<K,V> implem ...
- 深度分析:面试90%被问到的 Session、Cookie、Token,看完这篇你就掌握了!
Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie 的主要目的 ...
- Comparator比较器
Comparator比较器 简介 为什么写? comparator 是javase中的接口,位于java.util包下,该接口抽象度极高,有必要掌握该接口的使用 大多数文章告诉大家comparator ...
- Gradle全局代理配置
配置文件路径:C:\Users\myName\.gradle\gradle.properties 代理配置内容: systemProp.http.proxyHost=127.0.0.1 systemP ...
- Let's Do 本地开发智能合约
上篇文章我们发了个币,有人抱怨在线(remix)写代码不爽,好吧,那就来看下怎么在本地开发智能合约? 一.安装开发环境 1.安装Node,Node v8.9.4或更高版本 我安装的是: 2.集成开发框 ...
- Pytest自动化测试 - 简易教程
简介 pytest是动态编程语言Python专用的测试框架,它具有易于上手.功能强大.可扩展性好.兼容性强.效率高.第三方插件丰富等特点. 功能特征: 完整的文档,包括安装,教程和PDF文档 简单而又 ...
- mysql5.5升级5.7(1)
卸载旧版本mysql 当然要记得备份数据库数据啦 1.查看需要卸载的部分: rpm -qa |grep -i mysql 2.开始卸载: yum remove mysql* 接下来是安装新版mysql ...
- Codeforces Round #674 (Div. 3) F. Number of Subsequences 题解(dp)
题目链接 题目大意 给你一个长为d只包含字符'a','b','c','?' 的字符串,?可以变成a,b,c字符,假如有x个?字符,那么有\(3^x\)个字符串,求所有字符串种子序列包含多少个abc子序 ...