天天看点

Git 初步上手

文章目录

    • 1. git 简介
    • 2. git 与 svn 比较
    • 3. git 的工作流程
    • 4. git 分区
    • 5. git 常用命令
      • 5.1 初始化 git 仓库
      • 5.2 查看当前仓库状态
      • 5.3 工作区变更提交到暂存区
      • 5.4 暂存区内容提交到版本库
      • 5.5 设置用户
      • 5.6 查看版本管理信息
      • 5.7 回退版本
      • 5.8 撤销工作区操作:改、删(了解)
      • 5.9 撤销暂存区提交(了解)
    • 6. git 过滤文件
    • 7. git 多分支开发
    • 8. git 远程仓库
      • 8.1 创建远程仓库
      • 8.2 远程仓库相关命令
      • 8.3 ssh 链接远程仓库
    • 9. pycharm 中实现 git 相关
      • 9.1 配置 git
      • 9.2 克隆
      • 9.3 git add .
      • 9.4 git commit
      • 9.5 git pull 、git push
      • 9.6 过滤
      • 9.7 本地和远端所有分支
      • 9.8 查看所有历史更改
    • 10. git 变基
    • 11. git fetch
    • 12. git flow

1. git 简介

Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

其可以完成协同开发的项目,帮助开发者合并整合代码,如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突 。除了 Git 还有

SVN

也可以做到。

  • Git:是一种版本控制系统,是一个命令,是一种工具。
  • GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台
  • GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发
  • Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台

git 的安装

  • linux:centos
yum install git -y
           
  • mac 下:
https://github.com/timcharper/git_osx_installer/releases
下载软件,下一步安装
           
  • win下
https://git-scm.com/download/win
下载软件,下一步安装
           

2. git 与 svn 比较

Git :集群化,有没有客户端都可以使用

SVN:需要客户端,服务端架构

  • svn: 集群式,cs 架构,无网络不可提交
Git 初步上手
  • git: 分布式,无网络时也可以提交到本地版本库,待到有网络时再 push 到服务器
    Git 初步上手

3. git 的工作流程

Git 初步上手

4. git 分区

git 主要分为三个区

工作区:代码,文件存放的位置,新增,修改,删除文件,代码
暂存区:把工作区的更改提交到暂存区
版本库:把暂存区的数据,提交到版本库
           

在工作区修改代码,提交到暂存区,暂存区再提交到版本库,代码才被版本管理,才可以回退。

  • 注意:

    不同的区展示的文件颜色会不同,在工作区修改后的文件会呈现 红色 样式,从工作区提交到暂存区后会呈现 绿色 ,在从暂存区提交到版本库后会变回原来的颜色。各个区域可以相互操作,但工作区不能直接提交到版本库

5. git 常用命令

Git 初步上手

5.1 初始化 git 仓库

  • 打开 git bash,按照下面流程输入
cd 指定目录
git init
           

还可以添加名字:

git init 仓库名字

,这是在指定目录下创建自定义仓库名字(初始化)

  • 或者直接打开文件目录,点击右键的 git bash here 会在 git bash 中自动进入该路径,输入命令即可
    Git 初步上手
  • 初始化结束后会出现 .git 隐藏文件
    Git 初步上手

5.2 查看当前仓库状态

输入该命令后可以根据文件颜色来判断当前仓库的状态

git status
           
  • 在被管理的仓库中创建一个 py 文件后查看仓库状态,如下红色的 a.py 表示工作区中有修改且未提交到暂存区
    Git 初步上手

5.3 工作区变更提交到暂存区

如下所示,

.

表示当前路径下所有更改,将所有更改提交到暂存区,若是只需要将某一个文件更改提交只需要在 add 后添加文件名即可

更改完后再次查看仓库状态,如下所示

Git 初步上手

5.4 暂存区内容提交到版本库

  • 已有用户的情况,查看仓库状态,文件颜色会重新变为原来的白色
    Git 初步上手
  • 没有用户的情况,会提示需要设置用户
    Git 初步上手

5.5 设置用户

  • 设置全局用户
git config --global user.email "邮箱"
git config --global user.name "用户名"
           

使用上面的命令创建的全局用户数据会被放在 C:\Users\用户文件夹\.gitconfig 中(如下所示),并且所有仓库都可以使用

Git 初步上手
  • 设置局部用户
git config  user.email "邮箱"
git config  user.name "用户名"
           

局部用户只能在当前仓库使用,若当前仓库没有设置局部用户,会去寻找全局用户。

局部用户的信息存放在当前仓库下的 config 文件,如下所示

Git 初步上手

5.6 查看版本管理信息

git log 			显示谁在什么时间提交的,版本号是多少
git reflog			简略显示版本信息
           
  • git log
    Git 初步上手
  • git reflog
    Git 初步上手

5.7 回退版本

git reset --hard  版本号
           

版本号就是在查看版本管理信息的时候前面带的。可以只输入部分版本号

Git 初步上手

5.8 撤销工作区操作:改、删(了解)

5.9 撤销暂存区提交(了解)

6. git 过滤文件

Git工作目录中,有些文件必须要有,但又不能提交它们,就可以设置忽略文件

在Git工作区的根目录下创建一个特殊的

.gitignore

文件,然后把要忽略的文件名放进去,Git就会自动忽略这些文件

.gitignore 文件

1)在仓库根目录下创建该文件
2)文件与文件夹均可以被过滤
3)文件过滤语法(如下)
           
语法 作用
文件或文件夹名 代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名 代表仓库根目录下的文件或文件夹被过滤
a.txt 项目中所有a.txt文件和文件夹都会被过滤
/a.txt 项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt 项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x* 名字中有一个x的都会被过滤(*代表0~n个任意字符)
*.html 过滤所有以 html 结尾的文件

空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)

注意: 以'#'开始的行,被视为注释

7. git 多分支开发

git分支的概念 可以认为分支就是当前工作目录中代码的一份副本。 使用分支,可以让我们从开发主线上分离出来,以免影响开发主线

  • 创建分支

    git branch 分支名

  • 切换分支

    git checkout dev

  • 查看分支

    git branch

  • 删除分支

    git branch -d 分支名字

  • 合并分支

    git merge dev

    # 切换到要合并进的分支(master) ,把 dev 合并到master上

创建 dev 开发分支

Git 初步上手

查看分支

Git 初步上手

切换分支并查看当前分支

Git 初步上手

删除分支

注意,不能删除当前所在的分支

Git 初步上手

dev分支合并到master分支

Git 初步上手

基于分支的线上bug修复(开发新功能,出现bug)

Git 初步上手

8. git 远程仓库

以上操作都是在本地进行,并没有提交到远程仓库。而要将多人的代码合并到一起,需要有一个远程仓库。其中 github,gitee,gitlab 都是远程仓库

8.1 创建远程仓库

以 gitee 为例,在官网创建账号后创建仓库,如下所示

  • 创建仓库
    Git 初步上手
  • 配置仓库信息
    Git 初步上手
  • 创建完成后(未配置的空仓库)会有以下提示
Git 初步上手

8.2 远程仓库相关命令

命令 作用
git remote 查看仓库已配置的远程源
git remote add 源名 源地址 添加远程源
git remote remove 源名 删除远程源
git push 源码 分支名 提交代码到远程源
git clone 远程源地址 克隆远程源
  • 通过克隆方式连接远程源,默认远程源名就叫origin;所以主动添加远程源来连接远程仓库,源码也用origin
  • 本地一个仓库只需要和远程一个源进行同步,所以只需要连接一个远程源,如果还想把本地代码同步给第三个平台,那么可以通过主动添加远程源来连接第三个平台的远程仓库,此时的源码就不能再叫origin了,比如online都可以
  • pull和push都可以提供选择不同的源码,和不同的远程仓库交互

添加远程源

Git 初步上手

查看仓库已配置的远程源

Git 初步上手

提交代码到远程仓库

git push origin master
           

输入命令之后会提示你输入账号密码,如下所示

Git 初步上手

输入账号密码后以后都不需要输入了,并且账号密码存放在凭据中,如下所示

Git 初步上手

8.3 ssh 链接远程仓库

ssh的链接,不需要用户名密码,需要公钥和私钥。

详细说明可以参照:生成/添加SSH公钥

  1. 执行下面命令,并按三次回车,会在 /c/Users/用户名/.ssh/ 路径下生成公钥私钥
  1. id_rsa :私钥 不能泄露

    id_rsa.pub:公钥 可以给别人,配置到 git 远程仓库

  2. 公钥配置到 gitee 账户上。复制公钥,粘贴到gitee上配置 -项目仓库 => 管理 => 部署公钥管理 => 添加公钥 => 添加个人公钥
    Git 初步上手
  3. 把原来的 origin 删除,新增ssh源

    remote add orgin 源

    即可。

9. pycharm 中实现 git 相关

9.1 配置 git

Git 初步上手

9.2 克隆

首先需要进入到普通项目(没被git管理),按照下图点击

Git 初步上手
Git 初步上手

9.3 git add .

注意点: 在哪个目录点击 +Add 就是提交哪个部分修改代码(若是整个项目 +Add 等同于 git add .)

Git 初步上手

9.4 git commit

Git 初步上手
Git 初步上手

9.5 git pull 、git push

Git 初步上手

或者使用以下方式更加方便

Git 初步上手

pull 的时候会如下提示

Git 初步上手

9.6 过滤

同样也是添加

.gitignore

文件,在 pycharm 中添加文件会有以下提醒

Git 初步上手

勾选之后会自动将文件保存到暂存区,也就是文件颜色变绿

9.7 本地和远端所有分支

Git 初步上手

点击 New Branch 可以新增分支

Git 初步上手

9.8 查看所有历史更改

Git 初步上手
Git 初步上手
Git 初步上手

10. git 变基

在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。通过变基合并代码,可以让提交记录更简洁。具体内容查看官网: git 变基

11. git fetch

git pull 和 git fetch 比较

相同点首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
不同点git pull 类似于 git fetch+git merge
           

12. git flow

git flow 是分支模式,如下所示

Git 初步上手

master

  • 主分支 , 产品的功能全部实现后 , 最终在master分支对外发布
  • 该分支为只读唯一分支 , 只能从其他分支(release/hotfix)合并 , 不能在此分支修改
  • 另外所有在master分支的推送应该打标签做记录,方便追溯
  • 例如release合并到master , 或hotfix合并到master

develop

  • 主开发分支 , 基于master分支克隆
  • 包含所有要发布到下一个release的代码
  • 该分支为只读唯一分支 , 只能从其他分支合并
  • feature功能分支完成 , 合并到develop(不推送)
  • develop拉取release分支 , 提测
  • release/hotfix 分支上线完毕 , 合并到develop并推送

feature

  • 功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发
  • 功能开发完毕后合到develop分支(未正式上线之前不推送到远程中央仓库!!!)
  • feature分支可同时存在多个 , 用于团队中多个功能同时开发 , 属于临时分支 , 功能完成后可选删除

release

  • 测试分支 , 基于feature分支合并到develop之后 , 从develop分支克隆
  • 主要用于提交给测试人员进行功能测试 , 测试过程中发现的BUG在本分支进行修复 , 修复完成上线后* 合并到develop/master分支并推送(完成功能) , 打Tag
  • 属于临时分支 , 功能上线后可选删除

hotfix

  • 补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复
  • 修复完毕后合并到develop/master分支并推送 , 打Tag
  • 属于临时分支 , 补丁修复上线后可选删除
  • 所有hotfix分支的修改会进入到下一个release