1 什么是 Git
  ZT8lPCn7HRRr 2023年11月02日 22 0

1 什么是 Git

Git 是一个免费、开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。

Git 最初是由 Linus Torvalds 设计开发的,用于管理 Linux 内核开发。

2 Git 配置

2.1 配置作用域

Git 管理文件系统主要分为三个层次

# config的三个作用域
# 缺省(留空)等同于local
git config --local # local 只对某个仓库有效
git config --global # global 对登录用户所有仓库有效
git config --system # system 对系统所有登录的用户有效,基本不用

# 常用配置方式
git config --global user.name 'your_name' 
git config --global user.email 'your_email@domain.com'

# 如果你已经初始化过用户名和邮箱,现在想修改,那么使用下面的命令
git config --global --replace-all user.name "输入你的用户名"
git config --global --replace-all user.email "输入你的邮箱"

注:优先级 local > global > system,也就是说当对一个仓库同时设置了 global 和 local 那么采用 local 配置的信息。

2.2 查看配置信息

有时候我们也会查看 Git 配置信息等,使用如下命令可以查看相应层次的配置信息

# 显示 config 的配置 加--list
git config --list --local # 这个只能在 git 仓库中使用
git config --list --global
git config --list --system

2.3 清除配置信息

git config --unset --local user.name
git config --unset --global user.name

3 Git 初始化

3.1 注册账号

Git 在线代码托管的仓库平台,常用的有两种,一个是 GitHub,一个是 Gitee

  • GitHub 是全英文并且用户基数多,知名的库也多,在国内访问 Github 偶尔会有不稳定情况。
  • Gitee 全是中文,而且大部分用户都是国人,优秀的库相对于 GitHub 也少,但Gitee不会出现不稳定情况。

国内用户选择 Gitee,注册登录账号。

  • 登录后,点击右上角的➕号 -> 新建仓库

    image-20211227075042200

  • 仓库信息补充完整。

    image-20211227075159049

    • 仓库名称自定义,路径会自动根据仓库名称生成。
    • 仓库权限私有与开源区别在于,仓库的大小(开源为1G,私有为500M)和协作人数(开源不限,私有限制 5 人以下)
  • 新建仓库完成后,进入仓库,获取仓库地址。

    image-20211227075841504

    • 点击克隆/下载,选择 HTTPS,然后点击复制。

3.2 Git 初始化

Git 有两种方式来进行初始化

  • git clone

    你已经有一个远程的 Git 版本库,只需要在本地克隆一份

    git clone <远程仓库地址>
    
  • git init 和 git remote

    git init 命令进行初始化

    git remote add 命令来增加一个远程服务器端

    # cd 项目代码所在的文件夹
    git init
    # 添加远程库地址
    git remote add origin <远程仓库地址>
    # 修改远程地址
    git remote set-url origin <远程仓库地址>
    # 删除远程地址
    git remote rm origin
    

4 Git 基本命令

  • git add:将所有改动的文件(新增和有变动的)放在暂存区,由 git 进行管理。

    git add readme.md # 将 readme.md 文件添加到暂存区
    git add . # 将当前工作目录的所有文件添加到暂存区
    git add -u # 把修改之后的文件(这些文件已经被管理起来了)一次性提交到暂存区
    
  • git commit:提交当前工作空间的修改内容,提交的时候必须用 -m 来输入一条提交信息。

    git commit -m 'first commit' # -m 指定 commit 的信息
    git commit # 这时候会跳出一个文本输入界面,让你输入更多的 commit 信息
    # 修改代码提交信息
    git commit --amend
    
  • git status:查看工作区和暂存区文件的状态

    git status
    -- 红色:新增的文件/修改的文件  => git add .
    -- 绿色:已添加到暂存区  => git commit -m '描述信息'
    
  • git reset:从暂存区回撤

    git reset HEAD -- 文件名 // 撤回特定文件
    git reset HEAD -- . // 撤回暂存区所有的内容
    # 回滚历史版本
    git reset --hard 版本号
    
    # 查看提交历史记录
    git reflog
    # 回滚到指定记录
    git reset --hard 版本号
    
  • git mv:将 git 管理的文件进行重命名

    git mv readme readme.md # 使用git的方式对文件进行重命名
    
  • git rm:从 git 管理的文件删除某个已管理的文件,同时把修改的情况添加到暂存区

  • git log:查看历史日志

  • git pull:从版本库(既可以是远程的也可以是本地的)将代码更新到本地。

    # 将 origin 这个版本库的代码更新到本地的 master 主分支
    git pull origin master
    
    # 强制拉取没有关联的分支
    git pull origin master --allow-unrelated-histories
    
  • git push:将本地 commit 的代码更新到远程版本库中

    # 将本地的代码更新到名为 origin 的远程版本库中
    git push origin master
    git push origin <分支名称>
    # 强制推送
    git push origin master --force
    # 强制推送
    git push origin HEAD --force
    

Git 的三个区域

Git 的 3 个区域,分别是工作目录、暂存区、版本历史。

202112261059642

为什么要有暂存区

为什么要有暂存区,通过工作目录直接提交到本地仓库不就OK了!那么暂存区存在有什么作用,存在的意义是什么?

每一个功能应该单独做成一次提交,这样可以保证提交历史的清晰。否则,当你想要回滚历史的时候,你会无所适从,根本分不清每个版本包含了哪些功能,修复了哪些 bug,而暂存区的作用就是为了,可以选择提交,比如你在开发 B 功能的时候,发现 A 功能还存在 Bug,这时候就需要先修复 A 中的 Bug,然后先提交修复的 A 中的 Bug,然后再提交 B 功能开发的文件。这样就可以提高提交版本历史记录的清晰,方便回滚。

5 Git 分支

分支就相当于一个独立的开发空间,比如前端和后端开发,前端开发可以建立一个分支,后端开发也可以建立一个分支,但是彼此在不同工作空间里面工作的时候是互不影响的,当需要集成的时候又可以把他们集成到一个公共的分支上面去。

  • git branch 查看分支情况、创建分支、删除分支

    git branch -v # 查看本地分支的详细情况
    git branch -a # 查看所有分支,包括远端分支,但没有过于详细的信息
    git branch -av # 查看所有分支情况
    
    # 创建一个新的分支,基于 hash_value 的这个 commit 创建一个新的分支,hash_value 可以省略,那么默认是基于当前分支的最后一个 commit 创建。
    git branch branch_name hash_value
    
    # 删掉某个分支
    git branch -d branch_name
    git branch -D branch_name  # 这个分支已经有了一些 commit
    
  • git checkout 切换分支或者创建分支

    # 切换分支
    git checkout branch_name
    # 切换回主分支
    git checkout master
    # 创建一个新的分支并切换过去
    # git_id可以是hash_value,也可以是某个分支的名字(分支的名字其实就指向了某个 commit)
    git checkout -b branch_name git_id 
    git checkout -b temp 9ef147d
    git checkout -b temp2 master
    
    # 创建空分支
    git checkout --orphan branch_name
    # 清空目录
    git rm -rf .
    git rm --cached -r .
    
    # 合并分支,将指定分支合并到当前分支,切换分支后再合并
    git merge 分支名称
    # 在合并改动之前,你可以使用如下命令预览差异:
    git diff <source_branch> <target_branch>
    

    切换分支,必须在 .git 的同级目录下执行

6 Git FLow

在实际生产开发的过程中,如果每个人都随意的创建分支,随意的提交commit,必将导致整个 git 仓库非常的混乱,不易于团队协作。

Vincent Driessen 同学为了解决这个问题提出了A Successful Git Branching Model,最后形成了业内普遍采用的git 工作流程,大家都在约定的流程内使用 git,使得团队协作效率大大提高‌。

Git Flow 的常用分支

  • 生产分支(master)‌

    Master分支是仓库的主分支,这个分支包含最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改‌

  • 补丁分支(hotfix)‌

    当我们在生产环境发现新的Bug时候,我们需要基于master分支创建一个Hotfix分支,然后在Hotfix分支上修复bug,完成Hotfix后,我们要把hotfix分支合并回Master和Develop分支‌

  • 发布分支(release)‌

    当你需要发布一个新功能的时候,要基于Develop分支创建一个Release分支,在Release分支测试并修复bug,完成release后,把release合并到master和develop分支‌

  • 开发分支(develop)‌

    这个分支是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支‌

  • 功能分支(feature)‌

    feature分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release‌

git flow 的具体使用细节

  • 当我们新建git仓库之后,默认会创建一个主分支也就是master分支,由于master分支是用于发布生产环境,所有必须保证master上代码的稳定性,所以我们不能直接在master分支上修改提交。
  • 我们要基于master分支创建一个develop分支,develop分支用于保存开发好的相对稳定的功能,master分支和develop分支是仓库的常驻分支,一直会保留在仓库中。
  • 当新的开发任务来了之后,就要编写代码了,我们尽量不要在develop分支上写代码,要保证develop分支的相对稳定,所以这时我要就要基于develop 分支创建一个临时的开发分支,然后在开发分支上编写代码,等功能开发完之后我们再把开发分支合并到develop上。
  • 新功能合并到develop分支之后,我们想把新功能发布到生产环境,首先基于develop分支创建release分支,然后在release分支测试完成之后,把release分别合并到master分支和develop分支。
  • release分支合并到master分支之后,在master分支上打标签用于发布。
  • 我们把代码发布到了生产环境,用户在使用的时候给我们反馈了一个bug,这时我们需要基于master分支创建一个hotfix 分支,用于修复bug,bug修好之后,把 hotfix 分支分别合并到master分支和develop分支。
分支的命名规范 + 大家约定俗成的东西

1. 主分支 - master
    => 创建 git 仓库的时候就会生成的
    => 不接受任何代码上传
    => 只接收 dev 分支合并的内容
    => 只存储每一个迭代版本中经过测试合格的版本
2. 主开发分支 - dev / developmen / deve
    => 初始化项目以后, 就会直接从 master 上开辟的分支
    => 不接受任何代码上传
    => 只接收 主功能分支 合并的内容
    => 存储再开发过程中的每一个阶段内容
3. 主功能分支 - feature-xxx
    => 直接从 dev 分支上开辟出来的分支
    => 进行各个功能的开发
    => 开发完毕以后吧代码合并到 dev 分支上
    => 接收文件上传
4. 功能 bug 解决分支 - feature-xxx-fix-xxx
    => 再项目运行过程中, 出现 bug 进行修复的分支
    => 都是从 功能分支 上开辟出来的
    => 修改完毕以后合并到 功能分支上
    => 再由功能分支合并到 dev 分支上
5. 紧急 bug 解决 - hot-fix-xxx
    => 直接从 master 上开辟
    => 进行紧急的 bug 修复
    => 修复完毕以后, 直接合并到 master 上

7 Git 相关文件

.gitignore

git 忽略文件:在我们开发过程中,如果有一些文件并不希望被git所管理,可以新建一个 .gitignore 文件,在里面书写你不希望 git 帮你管理得文件或者文件夹。

  • 这个文件没有名字,只有后缀,window下如果不能直接创建,可以通过vscode
  • 文件的位置必须与 .git 文件同级

readme.md

说明文件:对当前仓库内容得描述和说明解释。

上传到远端仓库时,readme 中的内容会按照 Markdown 的格式显示在仓库的首页。

8 练习作业

  • 创建一个自己的 Git 远程仓库,并上传小米官网
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
ZT8lPCn7HRRr