GIT 安装和使用

GIT 安装和使用

一、GIT 介绍

  1. Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。

  2. GIT 下载页面 https://git-scm.com/downloads

  3. 相关书籍 https://git-scm.com/book/zh/v2

  4. GIT 工作流程

    • Workspace(工作区):就是电脑里看到的目录。
    • Stage/Index(暂存区):一般存放在 ".git目录下" 下的index文件中。
    • Repository(本次仓库/版本库):工作区有一个隐藏目录.git
    • Remote(远程仓库):Github 或者是公司内部搭的服务器

    四者之间的关系图

二、GIT 安装

  1. 下载完成后,选择安装路径,进行安装,我是用的是Git 2.23.0

  2. 选择组件
    git安装图1

  3. 选择默认编辑器
    git安装图2

  4. 选择命令行工具
    git安装图3

  5. 选择客户端
    git安装图4

  6. 选择安全连接方式
    git安装图5

  7. 检出和提交换行格式
    git安装图6

  8. 默认终端
    git安装图7

  9. 其它选项
    git安装图8

  10. 实验性功能
    git安装图9

  11. 安装成功

三、GIT 使用

1. 配置

  1. 检查是否安装成功。在桌面右击Git Bash Here,出现终端,输入命令 git --version 查看版本号。
  2. Git 配置文件
    • ``/etc/gitconfig文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有--system选项的git config` 时,它会从此文件读写配置变量。
    • ~/.gitconfig~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
    • 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
    • 每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
    • 在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。
  3. 配置用户名和邮箱
    • 设置用户名: git config --global user.name "abc"
    • 设置邮箱: git config --global user.email "xxx@xx.com"
    • 查看用户名:git config user.name
    • 查看邮箱:git config user.email
  4. 查看当前配置信息 git config --list
  5. 使用帮助信息 git help 命令

2. 创建版本库

  1. 版本库又名仓库,英文名repository,这是一个目录,目录里的文件被Git 管理。所以创建一个版本库只需要在一个空目录里使用 命令即可。

    git init
    

但是要注意,git 只能跟踪文本文件的改动,避免出现编码问题,所有文本最好使用标准的 无BOm 的UTF-8 编码。

  1. 添加文件到git 仓库

    • 先任意编辑一个文本文档。比如一个readme.txt,随意填写一些内容。
    # 首先将文件添加到 sage
    git add readme.txt
    # 提交到 Repository 的当前分支,我们创建 git版本库的时候,会自动创建一个master 分支。
    git commit -m "My first submission."
    # 查看还有那些文件没有提交
    git status
    # 修改readme.txt 文件,可以使用 git status 查看是否有修改。查看workspace 与 Repository,当stage 不是空,对比的是 workspace 和 stage 的差异。
    git diff readme.txt
    # 显示摘要而非整个 diff
    git diff --stat
    # 查看 Repository 和 stage 的差异。
    git diff --cached readme.txt
    git diff --staged
    # 查看 Repository 和 workspace 的差异
    git diff HEAD -- readme.txt
    # 然后再使用以上几步,进行提交
    
  2. 版本回退

    # 查看历史记录,记录会按时间顺序逆序展示
    git log
    # 如果感觉输出信息太多,可以使用参数
    git log --pretty=oneline
    # HEAD 表示当前版本,id 就是那个很长度字符串。上个版本就是 HEAD^,上上个就是 HEAD^^。以此类推,如果比较多,可以使用 HEAD~100
    git reset --hard HEAD^
    # 如果要想恢复,需要使用 id,每个人的都不一样,id 不用写完,但是要和已有的不冲突
    git reset --hard fb110
    # 如果回退后,希望恢复,但是忘记id了,可以查看命令记录,有相应的id号。顺序也是按照时间逆序
    git reflog
    # 撤销workspace的修改,将Repository的最近文件覆盖workspace。没有--,就变成了“切换到另一个分支”的命令
    git checkout -- readme.txt
    # 撤销 stage 的修改。使用已提交到Repository的最近文件覆盖stage
    git reset HEAD -- readme.txt
    # 如果已提交到Repository,则需要使用版本回退
    git reset --hard HEAD^
    # 自己错删文件,需要恢复
     git checkout -- test.txt
    # 确定要删除库中的文件
    git rm test.txt
    git commit -m "remove test.txt"
    
    

每次提交的信息以时间逆序排列,HEAD 就是最新记录的指针,可以快速的找到需要的记录。

3. 远程仓库

  • 创建SSH Key

    ssh-keygen -t rsa -C "xxx@xx.com"
    
  • 将用户目录下的.ssh 目录下的公钥内容复制到 https://github.com/settings/keys 中即可,title 任意。

  • 由于现在是 Remote 上的仓库是空的,所以 Repository 连接 Remote

    # 将 Repository 与 Remote 相连。添加后,远程库的名字就是origin,这是Git默认的名称。
    git remote add origin git@github.com:username/repositoryname.git
    # 现象 remote 复制到本地
    git clone git@github.com:JackingQueen/FirestTest.git
    # 将 Repository 的当前分支 master 推送到  origin
    git push -u origin master
    

4. 分支管理

  • 创建与合并分支

    # 创建other1分支
    git branch other1
    # 切换other1分支
    git checkout other1
    # 快速创建并切换分支,相当于上面两个命令
    git checkout -b other1
    # 创建并切换分支也可以使用 
    git switch -c other1
    # 查看当前分支
    git branch
    # 合并other1分支到当前分支,这次合并是“快进模式(Fast-forward)”,不是每次合并都能Fast-forward
    git merge other1
    # 切换回 master
    git checkout master
    # 切换回已有分支也可以使用 
    git switch master
    # 删除 other1分支
    git branch -d other1
    
  • 解决冲突

    # 以上是在当前分支要超过合并分支的时候,可以使用快进模式,但是如果两个分支对同一文件进行了不一样的操作,就会出现冲突
    git switch -c other2
    # 加入新内容 123456789
    vi test.txt
    git add test.txt
    git commit -m "o2 commit"
    git switch master
    # 加入新内容 123abc
    vi test.txt
    git add test.txt
    git commit -m "master commit"
    # 此时将other2 合并到 master将出现冲突,合并失败
    git merge other2
    # 使用命令查看冲突文件
    git status
    # 活着使用 git log 来看
    git log --graph --pretty=oneline --abbrev-commit
    # 查看合并文件冲突的地方,手动解决完冲突后在提交
    git add test.txt
    git commit -m "test merge"
    # 删除 other2 分支
    git branch -d other2
    
    # 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
    # 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
    git merge --no-ff -m "merge with no-ff" dev
    
  • bug 分支 和 Feature 分支

    #####bug 分支#####
    # 当前工作正执行到一半,但是突然有新的 bug 需要修复,可以先使用 stash 将现场储藏起来,等到以后恢复现场继续工作
    git stash
    # 查看刚刚的工作现场
    git stash list
    # 第一种:恢复后,stash内容并不删除
    git stash apply
    # 需要使用命令来删除
    git stash drop
    # 第二种:恢复的同时把stash内容也删了
    git stash pop
    # 再次查看,就看不到什么内容了
    git stash list
    # 将某个提交 复制到当前分支,需要使用这次提交的 id。比如 把bug提交的修改“复制”到当前分支,避免重复劳动
    git cherry-pick 4c805e2
    
    #####Feature分支#####
    # 开发一个新feature,最好新建一个分支。如果要丢弃一个没有被合并过的分支
    git branch -D dev
    
  • 多人协作

    # 查看远程库的信息
    git remote
    # 显示更详细的信息
    git remote -v
    # 推送分支
    # bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug
    # feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
    # master分支是主分支,因此要时刻与远程同步
    git push origin master
    # dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步
    git push origin dev
    
    # clone时,只能看到本地的master分支
    git remote add origin git@github.com:JackingQueen/FirestTest.git
    # 如果push 失败,就先抓取分支
    git pull
    # 如果 pull 也失败,就设置dev和origin/dev的链接
    git branch --set-upstream-to=origin/dev dev
    # 最后在 pull ,然后 push
    
    
    # rebase操作可以把本地未push的分叉提交历史整理成直线
    git rebase
    git log --graph --pretty=oneline --abbrev-commit
    

5.标签管理

  • Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动)。

    # 创建标签
    git tag v1.0
    # 查看所有标签
    git tag
    # 根据 commid 打标签
    git tag v0.9 f52c633
    # 查看标签信息
    git show v0.9
    # 可以携带参数。用-a指定标签名,-m指定说明文字。
    git tag -a v0.1 -m "version 0.1 released" 1094adb
    # 删除本地标签
    git tag -d v0.1
    # 推送标签
    git push origin v1.0
    # 一次性推送全部尚未推送到远程的本地标签
    git push origin --tags
    # 删除远程标签,先删本地,再删远程
    git tag -d v0.9
    git push origin :refs/tags/v0.9
    

6. 自定义

  • 修改颜色: git config --global color.ui true
  • 忽略特殊文件:在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
  • 配置别名:git config --global alias.st status
posted @ 2019-08-29 11:44  问魂归处  阅读(353)  评论(0编辑  收藏  举报