Git分布式版本控制工具

基本命令

  1. clone(克隆):从远程仓库中克隆代码到本地仓库
  2. checkout(检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加):在提交前先将代码提交到暂存区
  4. commit(提交):提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch (抓取):从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
  6. pull(拉取):从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
  7. push(推送):修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
  8. exit(退出): 退出git bash操作界面

Git安装和Git环境配置

下载与安装

git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此提前列举:

  • Is/I 查看当前目录
  • cat 查看文件内容
  • touch 创建文件

下载地址: https://git-scm.com/download

Downloads:点击下载对应系统的版本,列如:Windows MacOS Linux/Unix

之后在跳转界面选中适用于 对应系统 的 Git 下载
例如windows选择下列版本:64-bit Git for Windows Setup

安装完.exe文件后,在电脑任意目录点击右键能看到如下两个菜单则说明安装成功:

Git GUI Here
Git Bash Here

菜单

Git GUI:Git提供的图形界面工具
Git Bash:Git提供的命令行工具
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息

基本配置

  1. 打开Git Bash
  2. 设置用户信息
    1
    2
    git config --global user.name "Your Name"
    git config --global user.email "mail@example.com"
  3. 查看配置信息
    1
    2
    git config --global user.name
    git config --global user.email

为常用指令配置别名(可选)

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。

  1. 打开用户目录,创建.bashrc文件
    部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行如下命令
    1
    touch ~/.bashrc
  2. 在.bashrc文件中输入如下内容:
    1
    2
    3
    4
    #用于输出git提交日志
    alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
    #用于输出当前目录所有文件及基本信息
    aliasll='ls-al'
  3. 打开gitBash,执行 source~/.bashrc
    1
    source~/.bashrc

    解决GitBash乱码问题

  4. 打开GitBash执行下面命令
    1
    gitconfig--globalcore.quotepathfalse
  5. ${git_home}/etc/bash.bashrc 文件最后加入下面两行
    1
    2
    export LANG="zh_CN.UTF-8"
    export LC_ALL="zh_CN.UTF-8"

    获取本地仓库

    要使用Git对我们的代码进行版本控制,首先需要获得本地仓库
  6. 在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
  7. 进入这个目录中,点击右键打开Git bash窗口
  8. 执行命令git init
  9. 如果创建成功后可在文件夹下看到隐藏的.git目录。
1
2
3
4
# 初始化本地仓库
git init
# 查看目录下文件
ll

基础操作指令

创建仓库

创建一个新的本地仓库 ( 省略project-name则在当前目录创建。 )

1
git init <project-name>

克隆一个远程仓库。

1
git clone <url>

添加和提交

添加一个文件到暂存区, 比如git add . 就表示添加所有文件到暂存区。

1
git add <file>

提交所有暂存区的文件到本地仓库。

1
git commit -m "message"

提交所有已修改的文件到本地仓库。

1
git commit -am "message"

分支

查看所有本地分支, 当前分支前面会有一个星号*, -r查看远程分支, -a查看所有分支。

1
git branch

创建一个新的分支。

1
git branch <branch-name>

切换到指定分支, 并更新工作区。

1
git checkout -b <branch-name>

删除一个已经合并的分支。

1
git branch -d <branch-name>

删除一个分支, 不管是否合并。

1
git checkout -D <branch-name>

给当前的提交打上标签, 通常用于版本发布。

1
git tag <tag-name>

合并分支, —no-ff参数表示禁用Fast Forward模式, 合并后的历史有分支, 能看出曾
经做过合并, 而-ff参数表示使用FastForward模式, 合并后的历史会变成一条直线。

1
git merge --no-ff -m message <branch-name>

合并&挤压 (squash) 所有提交到一个提交

1
git squash <branch-name>

rebase 操作可以把本地未push的分叉提交历史整理成直线, 看起来更加直观。 但是, 如果多人协作时, 不要对已经推送到远程的分支执行rebase操作。
rebase不会产生新的提交, 而是把当前分支的每一个提交都 “复制”到目标分支上, 然后再把当前分支指向目标分支, 而merge会产生一个新的提交, 这个提交有两个分支的所有修改

1
2
git checkout <dev>
git rebase <main>

撤销和恢复

移动一个文件到新的位置。

1
git mv <file> <new-file>

从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区

1
git rm <file>

从索引/暂存区中删除文件, 但是本地工作区文件还在, 只是不希望这个文件被版本控制。

1
git rm --cached <file>

恢复一个文件到之前的版本

1
git checkout <file> <commit-id>

创建一个新的提交, 用来撤销指定的提交, 后者的所有变化将被前者抵消, 并且应用到当前分支。

1
git revert <commit-id>

重置当前分支的HEAD为之前的某个提交, 并且删除所有之后的提交。
—hard参数表示重置工作区和暂存区,
—soft参数表示重置暂存区,
—mixed参数表示重置工作区

1
git reset --mixed <commit-id>

撤销暂存区的文件, 重新放回工作区 ( git add的反向操作)

1
git restore --staged <file>

查看状态或差异

查看仓库状态, 列出还未提交的新的或修改的文件。

1
git status

查看提交历史, —oneline表示简介模式

1
git log --oneline

查看未暂存的文件更新了哪些部分。

1
git diff

查看两个提交之间的差异。

1
git diff <commit-id> <commit-id>

远程仓库

添加远程仓库。

1
git remote add <remote-name> <remote-url>

查看远程仓库

1
git remote -v

删除远程仓库。

1
git remote rm <remote-name>

重命名远程仓库。

1
git remote rename <old-name> <new-name>

从远程仓库拉取代码。 默认拉取远程仓库名origin的master或者main分支。

1
git pull <remote-name> <branch-name>

将本地改动的代码rebase到远程仓库的最新代码上 ( 为了有一个干净、 线性的提交历史) 。

1
git pull --rebase

推送代码到远程仓库 ( 然后再发起pull request) 。

1
git push <remote-name> <branch-name>

获取所有远程分支。

1
git fetch <remote-name>

查看远程分支。

1
git branch -r

Fetch某一个特定的远程分支

1
git fetch <remote-name> <branch-name>

GitFlow

GitFlow 是一种流程模型,用于在Git上管理软件开发项目。
主分支(master/main):代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的。
开发分支(develop):用于日常开发。所有的功能分支、发布分支和修补分支都应该从
开发分支派生出来。

功能分支(feature):用于开发单独的功能或者特性。每个功能分支都应该从开发分
支派生,并在开发完成后合并回开发分支。

发布分支(release):用于准备项目发布。发布分支应该从开发分支派生,并在准备好
发布版本后合并回主分支和开发分支。

热修复分支(hotfix):用于修复主分支上的紧急问题。热修复分支应该从主分支派
生,并在修复完成后,合并回主分支和开发分支。

main/master 默认主分支
origin 默认远程仓库
HEAD 指向当前分支的指针
HEAD^ 上一个版本
HEAD~ 上四个版本

git四个区域

工作区(Working Directory)-就是你在电脑里能实际看到的目录

  • 创建的文件,修改了的文件都会被放入工作区
  • 执行 git-log 查看日志(注:这是别名 原命令:git log —pretty=oneline —all —graph —abbrev-commit)

暂存区(Stage/Index)-暂存区也叫索引, 用来临时存放未提交的内容, 一般在.git目录下的index中。

  • 工作区任务执行 git add . 后文件被放到暂存区

本地仓库(Repository)-Git在本地的版本库, 仓库信息存储在.git这个隐藏目录中。

  • 暂存区任务执行 git commit -m “提交” 后文件被存放到本地仓库
  • 远程仓库克隆到本地仓库执行 git pull 或 git fetch merge

远程仓库(Remote Repository)-托管在远程服务器上的仓库。 常用的有GitHub、 GitLab、 Gitee。

  • 本地仓库的文件执行 git push 后提交到远程仓库