工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用,下面介绍一些git在工作中的一些使用实践~
Git的定义是:分布式版本控制系统,用于项目开发中的版本控制。
从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。
Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索(retrieve)该内容。
git管理的项目工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。在进行提交操作时,Git 会保存一个提交对象(commit object)。该提交对象会包含一个指向暂存内容快照的指针。 但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。
如果转载此博文,请附上本文链接,谢谢合作~ :https://liyangyang.blog.csdn.net/article/details/100939749
如果感觉这篇文章对您有所帮助,请点击一下“喜欢”或者“关注”博主,您的喜欢和关注将是我前进的最大动力!
git将项目的存储分为4部分,每部分有自己作用,见下图:(图片来自:博客)
Workspace
:工作区(当前用户操作修改的区域)Index / Stage
:暂存区 (add后的区域)Repository
:仓库区或本地仓库(commit后的区域)Remote
:远程仓库(push后的区域)Changes to be committed
::代表被add的文件,被加载到了暂存区Changes not staged for commit
:代表在当前分支中被修改的文件,还没有被add,存储在工作区Untracked files
:代表不被git追踪的文件,可以理解为不被git管理的文件$ 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 文件夹中。 工作目录会将它们解包为实际的文件以便编辑。首先,有个问题需要确认一下,提交信息是使用中文还是英文呢?
如果你的项目是开源项目并且面向国际的开源项目,类似于阿里的Druid\PingCAP的TiDB等,那么一定要是用英文提交信息的!
如果你的项目是公司内部使用或者只会被公司内部开发修改,那么中文也是不错的,更加便于查看和管理。当然,开发组中的英文能力都不错的话,用英文也是可以的。
分支Branch管理:
如果没有一个好的branch管理的话,可能会有下述图的情况,刺不刺激~
推荐的分支管理:
master
分支为主分支(保护分支),禁止直接在master上进行修改代码和提交,此分支的代码可以随时被发布到线上;develop
分支为测试分支或者叫做合并分支,所有开发完成需要提交测试的功能合并到该分支,该分支包含最新的更改;feature
分支为开发分支,大家根据不同需求创建独立的功能分支,开发完成后合并到develop分支;fix
分支为bug修复分支,需要根据实际情况对已发布的版本进行漏洞修复;标签Tag管理:
Tag采用三段式:v版本.里程碑.序号(v2.3.1)
当然,可以根据实际情况来设计,比如项目特别大,可以使用四段表达Tag,项目比较小也可以使用二段式Tag,只要符合场景并有实际意义即可
Tag相关:Tag管理
提交信息格式:
下面只是提供一种建议格式,大家可以根据自己的项目实际情况来定格式,只要能把当前提交表达清楚,格式统一,方便快速阅读和定位即可!
建议中文示例:
对应到英文:
格式(type:scope:body:issue)
<|新功能|修改|Bug修复|重构|测试>(影响模块)提交描述信息(#issue?)
优点作用
初始化项目,并上传到git服务器
基本过程: 创建远程仓库、初始化本地git仓库、将本地仓库与远程仓库关联起来、添加本地仓库想要提交的代码到本地git缓冲区,将本地仓库的本地分支与远程仓库的远程分支关联起来、提交代码
在git服务器上创建同名git项目,并获取http地址
本地git初始化项目git仓库,在项目目录下
git init
将本地git仓库和远程仓库关联起来,并设置远程仓库名称
git remote add
其中http地址为上述第一步获取的远程仓库的地址,name一般为origin,当然也可以设置其他的名字
例如:git remote add origin http://igit.corp.com/my/test.git
添加项目文件到本地git缓冲区
git add -A
git commit -m
‘初始化项目’
或者
git commit -a -m
‘初始化项目’
将本地分支关联远程分支并提交,git默认在远程分支上创建于本地分支同名的分支
git push --set-upstream origin master
这就是将本地的master分支 与 origin远程仓库关联起来并在远程仓库创建同名master分支,以后本地master都提交到远程仓库中的origin/master分支上。
upstream:上游的意思
提交某一分支的修改
git status
git diff
git add -A 或者 git add
git commit -m '提交信息'
git push
取消track某一文件
git rm -r --cache
untrack后,使用commit -a 时,不会将其添加到暂存区中
保存账号密码,避免每次push都要输入(简单方法)
git config --global credential.helper store
暂存自己的修改,便于接着工作(特别有用)
如果你正在一个分支上工作修改,leader让你改另外的分支的BUG或者对其他的分支做一些操作。
我们知道如果一个分支上有还没有commit的修改的话,不可以切换分支,但是又因为自己的工作还未完成,不想commit,此时git stash
就起作用了。
你要把现在正在工作的分支保存下来,等处理完其他的再回来接着当前分支的修改工作。
git stash
备份当前的工作区的内容,从最新的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。
同时,将当前的工作区修改的内容保存到Git栈中暂存起来。
git stash list
显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复
git stash apply
恢复暂存之后不删除暂存从Git栈中读取最新一次保存的内容,恢复工作区的相关内容。
git stash pop
恢复暂存之后删除暂存
从Git栈中读取最新一次保存的内容,恢复工作区的相关内容。之后pop会删除最新的暂存。
git stash drop
从Git栈删除最旧的一个暂存
其他:git stash pop
= git stash apply
+ git stash drop
版本的回溯与前进
有时候需要回溯或前进到以前的版本 或 回溯前进到以前的commit
只要记住commit_id就可以在版本之间来回的穿梭,注意是可以“来回”穿梭哦
git log
--> 复制所需的版本commit_idgit reset --hard
git push origin HEAD --force
初始化项目为git项目
git init
clone服务器代码到本地
git clone
添加修改文件到暂存区
git add
git add -A
添加所有修改文件到暂存区
提交修改到本地仓库
git commit -m '提交信息'
git commit -a -m '提交信息'
相当于git add -A + git commit -m 的整合
提交本地仓库的修改到远程仓库
git push
将远程库
git push --set-upstream
查看文件本次的修改
git diff
显示本次所有被修改文件的修改
git diff
显示该文件本次的修改
查看当前分支下当前状态
git status
显示出被修改的文件和提交的次数等
查看提交历史
git log
git log --graph
查看分支合并图
merge其他分支到当前分支
git merge
切换到上一个分支
git checkout -
切换到其他分支
git checkout
在某一分支基础上创建新分支
git checkout
切换到基础分支
git checkout -b
在当前分支基础上 创建新分支
显示分支
git branch
所有本地分支
git branch -r
所有远程分支
git branch -a
所有分支,本地和远程
删除本地分支
git branch -D
删除远程分支
git push origin --delete
删除本地tag
git tag -d
删除远程tag
git push origin :refs/tags/
查看tag信息
git show
暂存当前修改
git stash
查看暂存列表
git stash lsit
恢复暂存的修改
git stash apply
(恢复后不删除暂存)
git stash pop
(恢复后删除暂存)
删除暂存
git stash drop
撤回已经add到暂存区的文件到本地工作区
git reset HEAD
git reset HEAD
回退所有add
add会被标识为Changes to be committed,取消add后标识为Changes not staged for commit(不等于untrack)
取消track某一文件
git rm -r --cache
untrack后,使用commit -a 时,不会将其添加到暂存区中
只merge某一个分支上的某一个commit
git cherry-pick <被merge分支中的某一个commit的commit-id>
撤销在本地工作区的文件的修改
撤销修改就回到和版本库一模一样的状态,即用版本库里的版本替换工作区的版本
git checkout --
删除某些commit,将head重定位到某一commit(回溯到以前的版本)
git reset --hard
git push origin HEAD --force
此步骤将服务器方也设置为相commit
删除本地在远程服务器上不存在的分支
git remote prune origin
拉取远程分支到本地
git fetch origin
新建一个tag到指定commit
git tag
git tag
当前commit
取消当前合并,重建合并前状态
git merge --abort
本文介绍了Git是什么、Git的存储结构、Git的提交规则和一些工作中常会用到的git操作的过程,最后总结了常用的命令。Git在工作中的团队开发中起着至关重要的作用,希望本篇文章可以对大家有些许帮助~
推荐阅读: shell-【技术干货】编写shell脚本所需的语法和示例
参考:博客 博客 git官网
如果转载此博文,请附上本文链接,谢谢合作~ :https://liyangyang.blog.csdn.net/article/details/100939749
如果感觉这篇文章对您有所帮助,请点击一下“喜欢”或者“关注”博主,您的喜欢和关注将是我前进的最大动力!