Git-独霸一方

一、git是何方神圣

Git 是一个分布式版本控制软件,与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便

二、为什么要使用版本控制

如果我们要在一个开发好的项目上进行修改或者功能的添加是非常危险的行为,万一弄不好原来的代码都运行不了;按正常的思路,copy一份出来单独来弄,如果有了版本控制的机制,可以实现项目不同开发阶段的代码管理,而且对每个开发阶段进行了类似编号的控制,方便我们能回退到某个版本,其实说白了就是有后悔药吃!

三、安装git

下载:https://git-scm.com/download/win
选择安装目录一直下一步即可

1、配置个人信息

  • git config –global(前面两个横杠) user.name “用户名”
  • git config –global(前面两个横杠) user.email “邮箱”

四、git三大区域

三大区域

1、git本地工作流程

Uft2fx.png

  • 在目录中添加、修改、删除文件
  • 将需要进行版本管理的文件放入暂存区
  • 将暂存区的文件提交到版本库

2、文件的四种状态

Uftrm4.md.png

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

3、远程库

项目克隆时,git自动把本地与远程master分支对应起来,且远程库的默认名称是origin

五、冲突解决神器beyond compare(自行了解)

master分支只保留正式版本(线上版本)的代码,新功能开发版本、测试版本都用其他分支来完成。

六、gitflow工作流

Ufty79.md.png
UftWp6.png

注:中小型公司可能会把 release版本提测、code review 两个步骤省去。

七、团队协同开发项目的初始化

1》 个人项目

Uftgt1.md.png
UfNnHJ.md.png
UfNmB4.md.png
UfNeuF.md.png
注:点击邀请后对方会受到一封邮件,如果对方同意后就会成功添加到此项目中

2》 公司项目

UhoRMV.md.png
Uhogx0.md.png
Uhoc2q.md.png
Uho6Gn.md.png
UhoWrT.md.png
UhofqU.md.png
注:此处创建仓库与个人项目创建仓库步骤相同
Uho4ZF.md.png
此时就已经创建完成,可以进行代码托管啦
发布最初基础框架代码,然后打上 v1 标签,至此基础工作就做完啦

3》 项目及组织功能简介

U4SiSU.md.png
U4S9YV.md.png
U4SpF0.md.png
U4SCWT.md.png
U4VNrV.md.png

1、还可以给邀请的成员设置权限为可读、可写、管理员等,当然也可以给项目设置权限。
2、code - 代码区:提交的所有代码都在此处存放。
3、issues - 项目讨论区:所有的项目问题均可以在此处讨论,也可以在此处向指定或所有人提出问题等待回答,遇到项目问题可以先来此处看一下哦。
4、pull-requests - 合并请求区:当一个分支开发完成后请求老大(项目组长等)进行code-review就要新建一个pull-requests发送给老大,如果代码没问题则老大同意此请求合并到其他上级分支或主分支。
5、wiki - 项目讲解区:此处记录着项目的介绍,不懂项目的业务及功能的可以先来此处看一下哦。
6、fork-克隆:当你发现一个主流的开源框架某些缺陷时,你就可以先fork(克隆)一份到自己的github账号,然后再克隆此项目到本地进行修复完善此缺陷,修复成功你感觉很不错,想要告知原作者并将自己的修复代码贡献上去时,你就可以发起一个pull-requests给原作者,若果他感觉很好,同意你贡献的代码合并过来,那他只需同意你发的请求即可,然后你再去面试就可以说自己给某某开源项目贡献过代码,那工资又会升一个等级哟。
7、开启代码的review功能,按照图片进行,然后只需要add rule,再给某个分支配置 Branch name pattern就可以啦,如想把dev分支合并到master分支上,只需要add rule后配置Branch name pattern为master即可,当然还可以配置其他功能如让几个人review等。

八、git常用命令

git init —> 初始化
git status —> 查看当前工作分支状态
git add 文件名 —> 添加指定文件到暂存区
git add . —> 添加所有文件到暂存区
git commit -m ‘描述信息’ —> 提交文件到本地仓库
git log —> 查看日志
git clone —> 克隆项目
git diff —> 比较工作区与暂存区
git diff —> 比较两个commit-id之间的差异
git diff —> 两个分支之间比较
git diff –staged(前面是两个横线) —> 暂存区和版本库之间的比较(等同于git diff –cached(前面是两个横线))
git rm 文件名 —> 从暂存区域移除文件(连带从工作目录中删除指定的文件)
git rm –cached(前面是两个横线) 文件名 —> 从暂存区域移除文件
git remote —> 查看远程库的信息
git remote -v —> 查看远程库的详细信息
git remote add origin [url] —> 本地库与远程库关联
git reset –hard(前面是两个横线) 版本号 —> 回滚到之前的版本
git reflog —> 回滚到之后的版本

注:使用rebase可以更好的得到线性一棵提交树,看起来更直观。rebase过程中可能会发生冲突,此时系统会自动提示你去解决冲突,只需修改后进行git add即可,不需要再次git commit,若是merge提交冲突时只需要git add、git commit即可然后再选择执行如下命令
git rebase –continue(前面是两个横线) —> 继续rebase
git rebase –abort(前面是两个横线) —> 取消rebase
git rebase –skip(前面是两个横线) —> 忽略冲突

给git pull自动加上rebase参数可以设置
1、git config branch.分支名.rebase true —> 给某一个分支自动加–rebase参数
2、git config –global branch.autosetuprebase always —> 给所有分支自动加–rebase参数

如果暂时不想提交当前的开发内容,但又有其他紧急任务要处理,会用到如下命令
git stash —> 把当前工作改变的内容隐藏起来
git stash list —> 查看已经存在更改的列表

git pull = git fetch + git merge —> 远程拉取
git pull –rebase(前面是两个横线) = git fetch + git rebase —> 远程拉取(推荐)

git push origin 分支名 —> 提交到远程分支
git push origin HEAD –force(前面是两个横线) —> 远程版本回退
git push origin –delete(前面是两个横线) name —> 删除远程分支

git branch —> 查看分支
git branch name —> 创建新分支
git checkout name —> 切换分支
git checkout -b name —> 创建 + 切换分支
git merge name —> 合并某分支到当前分支
git branch -d naem —> 删除分支

git tag —> 查看标签
git tag -a 版本号(v1) -m ‘描述(第一版)’ —> 给当前版本打标签
git push origin –tags(前面是两个横线) —> 推送当前本地标签到远程(给远程打标签)
git tag -d 版本号 – 删除本地标签
git push origin :refs/tags/版本号 —> 删除远程标签(需要先删除本地标签)


   转载规则


《Git-独霸一方》 kang 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录