Git 为开源分布式版本控件工具
Git 工作原理
工作区(Working Directory):仓库文件夹里除 .git 目录以外的内容
-
版本库(Repository): .git 目录,用于存储记录版本信息
暂缓存(stage)
分支 (master): git 自动创建的第一个分支
HEAD 指针: 用于指向当前分支
-
git add 和 git commit 的原理
git add : 把文件修改添加到暂存区
git commit : 把暂存区的所有内容提交到当前分支
Git 常用命令
Git 初始化
git init
配置用户 与 邮箱
git config user.name "redoca"
git config user.email "redoca@163.com"
查看文件的状态
git status
添加文件至暂缓区
git add xxx.swift
git add . 添加所有文件至暂缓区
修改文件后也是通过 git add 来添加至暂缓区
git reset HEAD README.md
取消已缓存的内容
删除文件
git rm -rf *
-r 递归, 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f, * 全部文件,也可指定文件。
git rm --cache README.md
文件从暂存区域移除,但仍然希望保留在当前工作目录。
移动或重命名文件
git mv README README.md
提交至版本中
git commit -m "初始化项目"
git commit -am "fix bug"
如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步
查看历史版本
git log
git reflog
查看分支引用记录 简洁显示配置带颜色的 log 别名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
撤销commit / 版本之间切换
git log
找到想要撤销的idgit reset --hard e695b67
完成撤销, 同时将代码恢复到前一commit_id 对应的版本git reset --hard HEAD
回到当前版本,放弃所有没有提交的修改git reset --hard HEAD^
回到上一个版本git reset --hard HEAD~3
回到之前第3个修订版本git reset id
完成版本切换(Commit命令的撤销),但是不对代码修改进行撤销,可以直接通过 git commit 重新提交对本地代码的修改
替换本地改动
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。
丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:
git fetch origin
git reset --hard origin/master
推送改动
git push origin master
执行命令以将这些改动提交到远端仓库,可以把 master 换成你想要推送的任何分支
仓库连接到远程服务器
git remote add origin <server>
分支
创建一个叫做“feature_x”的分支,并切换过去:
git checkout -b feature_x
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_x
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:
git push origin <branch>
更新与合并
git pull
更新本地仓库至最新改动
git merge <branch>
合并分支
git add <filename>
合并后修改有冲突的文件执行此命令来标记合并成功。
git diff <source_branch> <target_branch>
在合并改动之前,你可以使用如下命令预览差异
标签
为软件发布创建标签是推荐的。你可以执行如下命令创建一个叫做 1.0.0 的标签,(gitee中可通过发行版功能打生产标签):
git tag 1.0.0 1b2e1d63ff
git命令起别名
git config alias.st "status"
git config alias.ci "commit -m"
--global 全局设置
在设置用户或起别名时可以通过 --global 进行全局设置
检出远程仓库
git clone username@host:/path/to/repository
git clone /path/to/repository
创建一个本地仓库的克隆版本
.gitignore 忽略文件
.gitignore可以指定哪些文件不纳入版本库的管理
参考网址:https://github.com/github/gitignore
Git Flow GIT操作规范
Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。
Git Flow中的分支
master分支 master 分支始终是最稳定的代码分支,我们每一次迭代开发完后发布到市场版本的代码分支,每次提交到master的代码都必须打上标签标示版本号。
develop分支 我们称为开发分支,又称集成分支(integration branch),辅助分支完成自己的开发之后都会合并到develop分支,确定要把当前已经集成的功能发布一个版本的时候,就需要把devlop分支合并到master分支(下面会介绍中间其实还有一个release分支),并打上带版本号的标签。
辅助分支 辅助分支也是开发人员主要使用的分支,辅助分支主要用于组织软件新功能的并行开发、简化新功能开发代码的跟踪、辅助完成版本发布工作以及对生产代码的紧急修复工作。与主分支不同,辅助分支通常只会在有限的时间范围内存在,完成辅助分支的使命后一般会被删除。
辅助分支包括:
-
feature分支
feature 分支就是我们每一次需求迭代开发的分支,每一个需求迭代,我们可以在develop 分支上拉去多个 feature 分支,也可以在别人的 feature 分支上拉去 另一个feature 分支,等feature 分支开发完成后,我们需要将feature 分支 合回到 develop 分支上
-
release分支
release 分支是类似于预生产的分支,当我们的一个迭代的需求开发完成后,开发分支 feature 已经合并回了 develop 分支上后,我们需要拉取 release 分支,也可以理解为当我们开始提测的时候,我们来拉去 release 分支,在这个分支上进行修改bug
当我们的 release 分支开发完后,我们需要将 release 分支合回 develop 分支 和master 分支 当release 分支合并到 master 分支上后,我们记得在 master 分支上打一个 tag
-
hotfix分支
hotfix 分支是当我们线上应用出现了重大的bug,这时我们需要发布一个紧急修复版本,这时我们需要在 master 分支上拉去 一个 hotfix分支
hotfix分支 开发完后,我们同样是需要合并回 master 分支 和 develop 分支 当hotfix 分支合并到 master 分支上后,我们记得在 master 分支上打一个 tag
分支命名规范
master: master 分支就叫master 分支
develop: develop 分支就叫develop 分支
feature: feature 分支 咱们暂时可以按
feature_wechat_v2.0.1
这种命名规范来,后面有更好的命名规范咱们再改。v2.0.1
表示当前迭代的版本号,wechat
表示当前迭代的名称,这里我们是开发小程序迭代,就命名了 wechatrelease: release 分支的名称我们直接命名为这次需求的版本号,比如:
2.0.1
, 因为后面当我们使用gitFlow 工具时,当我们完成release 分支时,这个 release 分支名会直接 当做 在master 上的 tag名,这样我们就不需要再 在master 分支上打 tag了hotfix: hotfix 分支的命名我们暂时可以按
hotfix_v2.0.2
这种来进行命名,v2.0.2
表示这次修复的版本的版本号