工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用,下面介绍一些git在工作中的一些使用实践~
Git的定义是:分布式版本控制系统,用于项目开发中的版本控制。
从本质上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。
git管理的项目工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。在进行提交操作时,Git 会保存一个提交对象(commit object)。该提交对象会包含一个指向暂存内容快照的指针。但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。
git将项目的存储分为4部分,每部分有自己作用,见下图
整体过程可以简述为:
add
–>暂存区–>commit
–>本地仓库区–>push
–>远程仓库区fetch
–>使用refs\remotes下对应分支文件记录远程分支末端commit_id 和 本地仓库区 →merge
–>工作区pull
–>使用refs\remotes下对应分支文件记录远程分支末端commit_id and 本地仓库区 and 工作区git pull和git fetch有什么不同呢?下面简单说一下
想要知道他们得不同,我们需要先了解两个概念
所以他们之间的不同在于:
在git status
中的体现,见下图:
$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Git 作为一个系统,是以它的一般操作来管理并操纵(HEAD、index、Working Directory)三棵树的
首先,有个问题需要确认一下,提交信息是使用中文还是英文呢?
如果你的项目是开源项目并且面向国际的开源项目,类似于阿里的Druid\PingCAP的TiDB等,那么一定要是用英文提交信息的!
如果你的项目是公司内部使用或者只会被公司内部开发修改,那么中文也是不错的,更加便于查看和管理。当然,开发组中的英文能力都不错的话,用英文也是可以的。
分支Branch管理: 如果没有一个好的 branch管理的话,可能会有下述图的情况,刺不刺激~
推荐的分支管理:
标签Tag管理:
Tag 采用三段式:v版本.里程碑.序号(v2.3.1)
当然,可以根据实际情况来设计,比如项目特别大,可以使用四段表达Tag,项目比较小也可以使用二段式Tag,只要符合场景并有实际意义即可.
提交信息格式: 下面只是提供一种建议格式,大家可以根据自己的项目实际情况来定格式,只要能把当前提交表达清楚,格式统一,方便快速阅读和定位即可!
<|新功能|修改|Bug修复|重构|测试>(影响模块)提交描述信息(#issue?)
初始化项目,并上传到git服务器
基本过程: 创建远程仓库、初始化本地git仓库、将本地仓库与远程仓库关联起来、添加本地仓库想要提交的代码到本地git缓冲区,将本地仓库的本地分支与远程仓库的远程分支关联起来、提交代码。
其中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:上游的意思
3、至此,应该就可以了,我们可以在git服务器上刷新看看是否提交上去了
提交某一分支的修改
查看当前分支的修改
git status
查看想要查看的文件的修改
git diff <file_name>
确认正确后,提交修改到暂存区
git add -A 或者 git add <file_name> <file_name>
提交到本地仓库
git commit -m '提交信息'
提交到远程仓库
git push
拉取远程分支修改到本地分支
当远程分支别人推了一版新的代码时,我们想要将代码拉下来,可以采用两种方式pull 和 fetch+merge:(他们的不同点文章上面已经解释)
将远程分支最新代码更新合并到本地仓库区和工作区
git pull
将远程所有分支最新的commit_id更新到FETCH_HEAD,记录远程分支最新的commit_id 和 本地仓库区
git fetch
将最新的代码合并到工作区
git merge
取消track某一文件
git rm -r --cache <file_name>
untrack后,使用commit -a 时,不会将其添加到暂存区中
之后会在.ignore文件中将该untrack的文件添加进去,完成
保存账号密码,避免每次push都要输入(简单方法)
确保在git中手动输入过账号和密码
输入下面语句即可
git config --global credential.helper store
暂存自己的修改,便于接着工作(特别有用)
如果你正在一个分支上工作修改,leader让你改另外的分支的BUG或者对其他的分支做一些操作。 我们知道如果一个分支上有还没有commit的修改的话,不可以切换分支,但是又因为自己的工作还未完成,不想commit,此时git stash 就起作用了。
你要把现在正在工作的分支保存下来,等处理完其他的再回来接着当前分支的修改工作。
将当前分支的修改暂存起来(此处不等于add+commit)
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_id
git reset --hard <commit_id>
git push origin HEAD --force
原文链接:https://liyangyang.blog.csdn.net/article/details/100939749