Git使用

一.简介

Git(读音为/ɡɪt/)是一个开源的分布式版本控制系统, Linus Torvalds 为了帮助管理 Linux Kernel 代码而创建了Git.

Git的优势:

  • 分布式版本库,无单点故障;
  • 支持离线提交, 几乎大部分操作都是本地执行, 速度快;
  • 记录文件快照, 而非更改差异, 通过SHA-1哈希算法保证文件完整性;
  • 分支操作方便,比较合并性能好;
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

SVN vs Git:

  • SVN是集中化的版本控制系统

1. 由一个中央服务器管理所有文件的修订版本(中央服务器数据丢失, 则会导致版本库丢失);
1. 协同工作的通过客户端连到这台服务器,取出最新的文件或者提交更新(无法离线提交);
1. 创建分支即拷贝目录, 分支不易合并, 切换分支速度慢.


  • Git是分布式版本控制系统

1. 每个人电脑上均有一份完整的版本库, 可离线提交.
2. 操作速度快


  • 基本操作对照

     SVNGit
    从仓库获取代码checkoutclone
    提交到服务器commitadd -> commit -> push
    更新代码updatepull

Git交互流程


二.Git的安装和配置

安装:

  • 在命令行界面下输入git, 如果未找到该命令, 则需要安装Git
  • windows系统可到 https://git-scm.com/download 下载windows版, 按默认选项安装即可 macOS 默认已自带git, 如未找到命令, 可使用 Homebrew 安装Git.

GUI安装(非必须): IDE自带GUI, gitk(git-scm安装后自带), SourceTree, TotorisGit

配置

重要: 初次安装git后需要配置个人的用户名电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录. user.name为真实姓名(用汉字), user.email为公司邮箱

git config --global user.name "张三"
git config --global user.email "zhangs@gantsoftware.com"

查看配置的值:

git config user.name
git config user.email

三. 常用操作

  • 克隆远程仓库到本地

    git clone git@git.gantsoftware.com:tangsw/git-demo.git
  • 查看当前状态

    git status
  • 添加文件到暂存区 git add

    # 添加文件file1到暂存区
    # 
    git add file1
    # 添加所有更改到到暂存区
    git add -A

  • 提交

    git commit -m "注释信息"
    # 
    # 自动将已经跟踪的文件加入暂存区, 并提交
    git commit -am "注释信息"
  • 推送到远程

    # 推送到本地master分支到远程master分支
    git push origin master
    # 
    # 推送本地feature/FW-1分支到远程feature/FW-1分支
    git push origin feature/FW-1
  • 拉取代码

    # 拉取并直接合并到本地的master分支
    git pull origin master
    # 
    # 下载远程所有更新 (不直接合并入本地分支)
    git fetch origin
  • 分支相关的操作

    # 列出所有分支
    git branch -a
    # 
    # 新建并切换到feature01分支
    git checkout -b feature01
    # 
    # 切换到master分支 (工作空间或暂存区有修改则无法切换)
    git checkout master
    # 
    # 强制切换到master分支 (会丢失工作空间和暂存区的修改)
    git checkout master -f
    # 
    # 删除feature01分支
    git branch -d feature01
  • 合并代码

    # 将feature01分支合并到当前分支
    git merge feature01
    # 
    # 将feature01分支合并到当前分支, 不使用fast-forward方式
    git merge --no-ff feature01
  • 撤销操作

    # 检出版本库最后一次提交的中的file1, 本地的file1文件会丢失. 但是暂存区文件不受影响
    git checkout file1
    # 
    # 重置暂存区的file1, 恢复到本地; 如果本地的file1文件又进行过修改, 则丢弃暂存区的file1
    git reset file1
    # 
    # 清除本地和暂存区的所有修改
    git reset --hard
    # 
    # 清除未跟踪的文件和目录
    git clean -fd
  • 版本回退

    # 方法1: 清除139dcf到develop当前位置的提交, 不包含139dcf
    git revert 139dcf..develop
    # 
    # 方法2: 方法1中回退少数提交是比较方便的, 但是如果提交中包含merge, 则无法回退. 
    # STEP1: 删除该目录下所有的文件 (.git, .gitignore文件不要删除)
    # STEP2: 检出139dcf的提交, 但不能影响branch
    git checkout 139dcf -- ./  
    # STEP3: 提交并推送到远程
    git commit -am "Revert to 139dcf"
    git push origin develop
    # 
    # 会撤销指定版本之后的提交, 不推荐 (可通过git reflog显示所有的提交)
    git reset --hard 139dcf
    git push -f origin master

四. 使用GitLab

GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。

登录GitLab

地址: http://git.xxxx.com/ 使用邮箱前缀作为用户名

生成秘钥对

Git支持多种协议,包括http/https,但通过ssh支持的原生git协议访问比http方式访问稳定, 并且可免去输密码的麻烦.

windows 下在任意目录右键 -> 打开Git Bash Here; macOS下直接打开终端

  1. 进入到.ssh目录 cd ~/.ssh;
  2. ls命令查看是否存在秘钥对文件 id_rsa 和 id_rsa.pub;
  3. 若不存在, 可通过以下命令创建秘钥对, 提示信息回车即可; ssh-keygen -t rsa -C "zhangs@gantsoftware.com"
  4. 查看公钥文件 cat id_rsa.pub
  5. 登录GitLab后, 访问 http://git.gantsoftware.com/profile/keys 页面, 将上一步显示的公钥拷贝至此处, 点击Add key.

Issue

用于提feature、提bug,功能类似于JIRA

Merge Request

合并请求, 例如分支上的feature开发完成, 需要合并到master

五. 分支策略

TrunkBased

GitFLow

GitHubFlow

GitHubFlow

GitLabFlow

总结

参考资料:

  1. 廖雪峰 git 使用教程
  2. git-book
  3. GitLab-CE 文档
  4. 图解Git
  5. Git操作脑图
  6. 常用 Git 命令清单
  7. GitLabFlow


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值