Git

作者: redoca | 来源:发表于2019-02-15 11:36 被阅读15次

    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 找到想要撤销的id

    • git 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 表示当前迭代的名称,这里我们是开发小程序迭代,就命名了 wechat

    • release: release 分支的名称我们直接命名为这次需求的版本号,比如:2.0.1, 因为后面当我们使用gitFlow 工具时,当我们完成release 分支时,这个 release 分支名会直接 当做 在master 上的 tag名,这样我们就不需要再 在master 分支上打 tag了

    • hotfix: hotfix 分支的命名我们暂时可以按 hotfix_v2.0.2 这种来进行命名,v2.0.2 表示这次修复的版本的版本号

    相关文章

      网友评论

          本文标题:Git

          本文链接:https://www.haomeiwen.com/subject/hhspeqtx.html