前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git-【技术干货】工作中Git的使用实践

Git-【技术干货】工作中Git的使用实践

作者头像
洋仔聊编程
发布2019-09-19 17:50:04
6330
发布2019-09-19 17:50:04
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

代码语言:txt
复制
                 本文链接:[https://blog.csdn.net/CSDN\_\_\_LYY/article/details/100939749](https://blog.csdn.net/CSDN___LYY/article/details/100939749) 

工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用,下面介绍一些git在工作中的一些使用实践~

一:前言

Git的定义是:分布式版本控制系统,用于项目开发中的版本控制。

从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。

Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索(retrieve)该内容。

git管理的项目工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。

  • 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。
  • 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。
  • 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。

Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。

在进行提交操作时,Git 会保存一个提交对象(commit object)。该提交对象包含一个指向暂存内容快照的指针、作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。

如果转载此博文,请附上本文链接,谢谢合作~ :https://cloud.tencent.com/developer/article/2183414 如果感觉这篇文章对您有所帮助,请点击一下“喜欢”或者“关注”博主,您的喜欢和关注将是我前进的最大动力!

二:git存储

git将项目的存储分为4部分,每部分有自己作用,见下图:(图片来自:博客)

  • Workspace:工作区(当前用户操作修改的区域)
  • Index / Stage:暂存区 (add后的区域)
  • Repository:仓库区或本地仓库(commit后的区域)
  • Remote:远程仓库(push后的区域)

在**git status中**的体现,见下图:

  • Changes to be committed::代表被add的文件,被加载到了暂存区
  • Changes not staged for commit:代表在当前分支中被修改的文件,还没有被add,存储在工作区
  • Untracked files :代表不被git追踪的文件,可以理解为不被git管理的文件
  • 如果没有Changes to be committed和Changes not staged for commit说明现阶段所有的修改已经被commit到本地仓库
  • 如果git status后出现下述情况,说明还有已经的commit到本地仓库的还未被push到远程仓库
代码语言:javascript
复制
$ git status
On branch network-master
Your branch is ahead of 'origin/network-master' by 2 commits.
  (use "git push" to publish your local commits)

Git 作为一个系统,是以它的一般操作来管理并操纵(HEAD、index、Working Directory)三棵树的

  • HEAD: 是当前分支引用的指针,它总是指向该分支上的最后一次提交。 这表示 HEAD 将是下一次提交的父结点。 通常,理解 HEAD 的最简方式,就是将它看做 你的上一次提交的快照。
  • index: index索引是你的 预期的下一次提交。 我们也会将这个概念引用为 Git 的 “暂存区域”,这就是当你运行 git commit 时 Git 看起来的样子。Git 将上一次检出到工作目录中的所有文件填充到索引区,它们看起来就像最初被检出时的样子。 之后你会将其中一些文件替换为新版本,接着通过 git commit 将它们转换为树来用作新的提交。
  • Working Directory:最后,你就有了自己的工作目录。 另外两棵树以一种高效但并不直观的方式,将它们的内容存储在 .git 文件夹中。 工作目录会将它们解包为实际的文件以便编辑。
三:git提交规则

首先,有个问题需要确认一下,提交信息是使用中文还是英文呢?

如果你的项目是开源项目并且面向国际的开源项目,类似于阿里的Druid\PingCAP的TiDB等,那么一定要是用英文提交信息的!

如果你的项目是公司内部使用或者只会被公司内部开发修改,那么中文也是不错的,更加便于查看和管理。当然,开发组中的英文能力都不错的话,用英文也是可以的。

分支Branch管理:

  • master 分支为主分支(保护分支),禁止直接在master上进行修改代码和提交;
  • develop 分支为测试分支,所有开发完成需要提交测试的功能合并到该分支;
  • feature 分支为开发分支,大家根据不同需求创建独立的功能分支,开发完成后合并到develop分支;
  • fix 分支为bug修复分支,需要根据实际情况对已发布的版本进行漏洞修复;

标签Tag管理:

Tag采用三段式:v版本.里程碑.序号(v2.3.1)

  • 架构升级或架构重大调整,修改第1位
  • 新功能上线或者模块大的调整,修改第2位
  • bug修复上线,修改第3位

当然,可以根据实际情况来设计,比如项目特别大,可以使用四段表达Tag,项目比较小也可以使用二段式Tag,只要符合场景并有实际意义即可

Tag相关:Tag管理

提交信息格式:

下面只是提供一种建议格式,大家可以根据自己的项目实际情况来定格式,只要能把当前提交表达清楚,格式统一,方便快速阅读和定位即可!

  1. 建议示例:
    • <新功能>(urllAnalyz) 添加解析url功能l
    • <修改>(TestServiceImpl) 修改某功能的某个实现为另一个实现
    • <Bug修复>(TestUnti) 修复url特殊情况下解析失败问题 (issue#12)
    • <重构>(getData) 重构获取数据的方法
    • <测试>(getDataTest) 添加(修改、删除)获取数据的单元测试代码
  2. 格式 <|新功能|修改|Bug修复|重构|测试>(影响模块)提交描述信息(#issue?)
  3. 优点作用
    • 与github数据issue关联,便于通过issue获取更多信息
    • commit 提交时,格式统一,便于后续快速准确定位提交
    • 可以更好的将此次提交表述清楚
四:基础命令

初始化项目为git项目

1.cd到项目文件路径下

2.git init

clone服务器代码到本地

git clone <http_url>

添加修改文件到暂存区

git add <file_name>

git add -A 添加所有修改文件到暂存区

提交修改到本地仓库

git commit -m ‘提交信息’

git commit -a -m ‘提交信息’ 相当于git add -A + git commit -m 的整合

提交本地仓库的修改到远程仓库

git push

查看文件本次的修改

git diff 显示本次所有被修改文件的修改

git diff <file_name> 显示该文件本次的修改

查看当前分支下当前状态

git status 显示出被修改的文件和提交的次数等

查看提交历史

git log

merge其他分支到当前分支

git merge <branch_name>

切换到上一个分支

git checkout -

切换到其他分支

git checkout <branch_name>

在某一分支基础上创建新分支

git checkout <branch_name> 切换到基础分支

git checkout -b <new_branch_name> 在当前分支基础上 创建新分支

显示分支

git branch 所有本地分支

git branch -r 所有远程分支

git branch -a 所有分支,本地和远程

删除本地分支

git branch -D

删除远程分支

git push origin --delete

删除本地tag

git tag -d <tag_name>

删除远程tag

git push origin :refs/tags/<tag_name>

查看tag信息

git show <tag_name>

保存账号密码,避免每次push都要输入

1.确保在git中手动输入过账号和密码

2.输入下面语句

git config --global credential.helper store

取消add后的的文件

git reset HEAD <file_name>

git reset HEAD 回退所有add

add会被标识为Changes to be committed,取消add后标识为Changes not staged for commit(不等于untrack)

取消track某一文件

  1. git rm -r --cache <file_name>

untrack后,使用commit -a 时,不会将其添加到暂存区中

只merge某一个分支上的某一个commit

git cherry-pick <被merge分支中的某一个commit的commit-id>

删除某些commit,将head重定位到某一commit

git reset --hard <commit_id>

git push origin HEAD --force 此步骤将服务器方也设置为相commit

删除本地在远程服务器上不存在的分支

git remote prune origin

新建一个tag到指定commit

git tag <tag_name> <commit_id>

git tag <tag_name> 当前commit

取消当前合并,重建合并前状态

git merge --abort

五:进程

初始化项目,并上传到git服务器

基本过程: 创建远程仓库、初始化本地git仓库、将本地仓库与远程仓库关联起来、添加本地仓库想要提交的代码到本地git缓冲区,将本地仓库的本地分支与远程仓库的远程分支关联起来、提交代码

  1. 在git服务器上创建同名git项目,并获取http地址
  2. 本地git初始化项目git仓库,在项目目录下 git init
  3. 将本地git仓库和远程仓库关联起来,并设置远程仓库名称 git remote add <http地址>

其中http地址为上述第一步获取的远程仓库的地址,name一般为origin,当然也可以设置其他的名字 例如:git remote add origin http://igit.corp.com/my/test.git

  1. 添加项目文件到本地git缓冲区 git add -A git commit -m ‘初始化项目’ 或者 git commit -a -m ‘初始化项目’
  2. 将本地分支关联远程分支并提交,git默认在远程分支上创建于本地分支同名的分支 git push --set-upstream origin master

这就是将本地的master分支 与 origin远程仓库关联起来并在远程仓库创建同名master分支,以后本地master都提交到远程仓库中的origin/master分支上。 upstream:上游的意思

  1. 至此,应该就可以了,我们可以在git服务器上刷新看看是否提交上去了

提交某一分支的修改

  1. 查看当前分支的修改 git status
  2. 查看想要查看的文件的修改 git diff <file_name>
  3. 确认正确后,提交修改到暂存区 git add -A 或者 git add <file_name> <file_name>
  4. 提交到本地仓库 git commit -m ‘提交信息’
  5. 提交到远程仓库 git push

取消track某一文件

  1. git rm -r --cache <file_name>

untrack后,使用commit -a 时,不会将其添加到暂存区中

  1. 之后会在.ignore文件中将该untrack的文件添加进去,完成

推荐阅读: shell-【技术干货】编写shell脚本所需的语法和示例

参考:博客 博客 git官网

如果转载此博文,请附上本文链接,谢谢合作~ :https://cloud.tencent.com/developer/article/2183414 如果感觉这篇文章对您有所帮助,请点击一下“喜欢”或者“关注”博主,您的喜欢和关注将是我前进的最大动力!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年09月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:前言
  • 二:git存储
  • 三:git提交规则
  • 四:基础命令
  • 五:进程
相关产品与服务
脆弱性检测服务
脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档