Git应用
简介
Git 是一个免费和开源的分布式版本控制系统,旨在以速度和效率处理从小型到大型项目的所有内容。可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper
Git易于学习, 占用空间小,性能快如闪电。它优于 SCM 工具,如 Subversion、CVS、Perforce 和 ClearCase,具有、方便和等功能。
分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的 修改了。
核心
上图所展示的便是Git的核心,只有充分理解上图,才能很哈的使用Git这一工具。
主要分为四部分:
- 远程仓库(GitHub, Gitee等托管平台)。
- 本地仓库:在自己的项目根目录,通过在Git bash中使用git init命令创建仓库。
- 暂存区:当我们的代码完成了一个阶段,我们想当前的这个版本在本地仓库进行保存一个版本,也就是commit操作,但是假如我们每次文件修改后都需要进行一次commit,会比较麻烦,所以Git给我们提供了一种方式,就是将修改的文件进行一次add操作,添加到暂存区中,在进行了一些add之后,统一进行commit操作。当然也可以直接每次add之后就进行commit。
- 工作区:我们在资源管理器里可以看到的文件就是我们的工作区
上图中所展示的命令如下(下文也会说到):
- clone(克隆): 从远程仓库中克隆代码到本地仓库
- checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
- add(添加): 在提交前先将代码提交到暂存区
- commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
- fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
- pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于 fetch+merge
- push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
基础配置
1 配置用户信息
在Git bash中输入以下命令即可
1 | git config --global user.name "用户名" |
1 | git config --global user.email "邮箱地址" |
2 查看用户信息
在Git bash中输入以下命令即可
1 | git config --global user.name |
1 | git config --global user.email |
也可以通过下面的命令直接查出
1 | git config --global --list |
3 为命令起别名
在用户目录创建.bashrc文件。
在此文件中添加别名
1
2
3alias 别名='原始命令' #基本格式
#举例
alias gitlog='git log --pretty=oneline --all --graph --abbrev-commit'打开Git bash,执行以下命令
1
source ~/.bashrc
4 处理中文乱码
在Git bash中输入以下命令
1
git config --global core.quotepath false
打开Git安装命令,找到etc/bash.bashrc 文件末尾添加以下信息
1
2export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
基础命令
1 将文件添加至暂存区
1 | git add 文件名 #将指定文件上传至暂存区 |
2 将文件提交到本地仓库
1 | git commit -m "XXXX" |
3 查看文件状态
1 | git status #查看文件现在所处的状态 |
4 查看日志
1 | git log -参数 |
参数:
- –all 显示所有分支
- –pretty=oneline 将提交信息显示为一行
- –abbrev-commit 使得输出的commitId更简短
- –graph 以图的形式显示
1 | git log #所展示的内容很少,基本很少使用 |
一般采用命令
1 | git-log='git log --pretty=oneline --all --graph --abbrev-commit |
但使用时较为复杂,我们可以为命令起别名。在基础配置中可以看到。
5 版本回退
1 | git reset --hard commit_id #commit_id通过查日志得等 |
如果提交记录被删除,不能获得commit_id。可以通过git reflog查询。
忽略文件
1 简介
在我们的项目中,有许许多多的文件。但不是所有的文件(比如:java项目下的字节码文件,日志文件等等)我们都不需要上传至代码托管平台。对于这种文件,我们可以在工作目录中创建一个名为 .gitignore 的文件。列出要忽略的文件模式。
2 语法
下面是几种常见的忽略格式:
1 | *.文件后缀名 #如: *.txt 忽略所有以.txt为后缀的文件 |
分支命令
1 查看分支
1 | git branch |
2 创建分支
1 | git branch 分支名 |
3 切换分支
1 | git checkout 分支名 |
4 创建并切换分支
1 | git checkout -b 分支名 |
4 合并分支
1 | git merge 分支名 |
5 删除分支
只能删除其他分支,不能删除当前分支
1 | git branch -d 分支名 #删除分支时,需要检查 |
6 解决冲突
当多个分支同时对同一个文件的同一个位置修改时,在合并分支时便会产生冲突。
解决方法:
- 处理冲突产生的文件(分支的开发者讨论使用一个分支的内容)
- 重新上传。
远程仓库
1 添加远程仓库
1 | git remote add 远端名称 仓库路径 |
- 远端名称:默认是origin,可以自定义
- 仓库路径:从码云仓库主页获取
2 查看远程仓库
1 | git remote |
3 推送到远程仓库
1 | git push [-f] [--set-upstream] [[远端名称 [本地分支名][远端分支名]] |
- 如果远端分支名和本地分支名一样,则可以省略远端分支名
- -f :强制覆盖
- –set-upstream : 推送到远端的同时并且建立起和远端分支的关联关系。
- 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
4 查看本地远程关系
1 | git branch -vv |
5 从远程仓库克隆
1 | git clone 仓库路径 [本地目录] #本地目录可以省略,会自动生成本地目录 |
6 从远程仓库中抓取和拉取
1 抓取
抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
1 | git fetch [remote name] [branch name] |
- 如果不指定远端名称和分支名,则抓取所有分支。
2 拉取
拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
1 | git pull [remote name] [branch name] |
- 如果不指定远端名称和分支名,则抓取所有并更新当前分支。
7 解决合并冲突
概述:在某一段时间内,有甲、乙两个人相继修改了同一个文件中的代码。此时就会出现合并冲突
解决方法:甲先推送到远程仓库后,乙拉取到本地修改后再推送到远程仓库。