前置知识
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,同时它不必服务器端软件支持,可以离线操作
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
Git 配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件- 当前项目的 Git 目录中的配置文件(也就是工作目录中的
.git/config
文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量 - 配置个人的用户名称和电子邮件地址
-
git config --global user.name "username" git config --global user.email "your email"
-
- 如果要在某个特定的项目中使用其他名字或者邮件,只要去掉
--global
选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里 - 检查已有的配置信息,可以使用
git config --list
命令
Git 基本操作
git init 初始化仓库
Git 使用 git init <repository>
命令来初始化一个 Git 仓库,在执行完成命令后,Git 仓库会生成一个 .git
目录,该目录包含了资源的所有元数据,其他的项目目录保持不变
参数说明:
- repository 本地仓库名称
#在当前目录下初始化仓库,使用如下语句
git init
#指定目录中初始化仓库,使用如下语句
git init repository-name
文件的追踪(add)和提交(commit)
所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add <fileName>
命令告诉 Git 开始对这些文件进行跟踪并存放到暂存区,然后使用 git commit -m 提示语
提交,此时文件存放在本地仓库
#添加追踪的文件到暂存区,如追踪readme.md。添加所有可以使用 git add .
git add readme.md
#提交文件到本地仓库
git commit -m "新增readme.md文件"
注: 在 Linux 系统中,commit 信息使用单引号 ,Windows 系统,commit 信息使用双引号
查看文件的状态(status)和差异(diff)
git status
命令用于查看在上次提交之后是否有对文件进行再次修改
git diff
命令比较文件的不同,即比较文件在暂存区和工作区的差异
#显示暂存区和工作区的差异,fileName可有可无
git diff <fileName>
#显示暂存区和上一次提交的差异
git diff --cached fileName
拉取远程仓库代码到本地(clone)
使用 git clone <remote address> <directory>
从远程 Git 仓库中拷贝项目到本地仓库中
参数说明:
- remote address:远程 Git 仓库地址
- directory:本地仓库
#拉取远程Git仓库到本地
git clone https://gitee.com/web-socket.git
#拉取远程Git仓库到本地指定的仓库
git clone https://gitee.com/web-socket.git webSocket
回退版本(reset)
git reset
命令用于回退版本,可以指定退回某一次提交的版本
语法为 git reset [--hard] [HEAD]
参数说明:
- --hard:参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
-
HEAD 说明:
-
HEAD 表示当前版本
-
HEAD^ 上一个版本
-
HEAD^^ 上上一个版本
-
HEAD^^^ 上上上一个版本。以此类推即可
- 使用数值表达回退的版本:HEAD~数值 ,其中数值从0开始,0表示当前版本,1表示上一个版本,以此类推
-
#把当前的版本回退到上一个版本
git reset --hard HEAD^
#把当前的版本回退到指定的版本号。先试用reflog获取版本号,通过版本号回退
git reflog
git reset --hard 版本号
#指定文件回退到指定的版本号
git reset HEAD^ 文件名
回退单个文件(checkout)
当一个文件在某次发现修改错误了并已经提交到远程仓库了,但分支的HEAD已经走了好远了,此时可以使用 git checkout
命令进行检出提交前的内容进行还原
- 先使用
git log 文件路径
查看这个文件的提交版本号 - 使用
git checkout 提交版本号 文件路径
进行检出这个提交版本前的记录
查看提交历史日志(log)
查看提交历史常用的两个命令
git log
查看历史提交记录- 参数说明
--oneline
选项来查看历史记录的简洁的版本-
--graph
选项,查看历史中什么时候出现了分支、合并 --reverse
参数来逆向显示所有日志--author
查找指定用户的提交日志
- 参数说明
git blame <file>
以列表形式查看指定文件的历史修改记录
# 查看所有文件提交日志
git log
# 查看指定文件的提交日志
git blame test.java
# 查看历史记录的简洁的版本
git log --oneline
远程仓库的操作(remote)
- 显示所有远程仓库
git remote -v
- 注:origin 表示远程地址的别名
- 显示某个远程仓库的信息
git remote show 远程仓库地址
- 向本地库中添加远程版本库,主要用于初始建立项目时使用的
git add remote 本地的版本库 远程仓库地址
---- 用的比较多-
# 创建本地git仓库(若存在本地git仓库,直接添加远程仓库关联即可) mkdir text-git cd text-git #初始化git仓库 git init touch README.md git add README.md git commit -m "first commit" #新增远程仓库的关联 git remote add origin https://gitee.com/text-git.git git push -u origin master
-
- 删除远程仓库
git remote rm 仓库名
- 修改远程仓库名
git remote rename 旧的仓库名 新的仓库名
获取远程仓库代码(pull)
从远程获取代码并合并本地的版本 git pull <远程主机名> <远程分支名称>:<本地分支名称>
如果本地分支名与远程分支名相同,则可以省略冒号后面部分
# 拉取远程的dev分支
git pull origin dev
#将远程主机 origin 的 dev 分支拉取过来,与本地的 feature-xf 分支合并
git pull origin dev:feature-xf
#如果远程分支是与当前分支合并,则冒号后面的部分可以省略
git pull origin feature-xf
向远程仓库推送代码(push)
将本地的分支版本上传到远程并合并 git push <远程主机名> <远程分支名称>:<本地分支名称>
如果本地分支名与远程分支名相同,则可以省略冒号后面部分
- 强制推送可以使用
--force
参数
#将本地的 feature-xf 分支代码向远程仓库 dev 分支推送
git push origin dev:feature-xf
#将本地的 dev 分支代码向远程仓库 dev 分支推送
git push origin dev
# 如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
git push --force origin dev
分支管理(branch)
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。Git 分支实际上是指向更改快照的指针
- 列出本地所有分支
git branch
- 创建分支
git branch 分支名
- 切换分支
git checkout 分支名
- 删除分支
git branch -d 分支名
切换分支(checkout)
git checkout
命令可以切换通过git branch
命令创建的分支。checkout一个分支,会更新当前的工作空间中的文件,使其与检出分支的commit版本状况保持一致。这之后工作区中的所有变更都会被记录在checkout出来的那个分支上
- 切换一个存在的分支
git checkout 分支名
- 创建并切换分支
git checkout -b 分支名
合并分支(merge)
将两个或两个以上的开发历史合并一起 git merge 分支名
#合并分支dev和bug01在当前分支master的顶部,使它们合并
git merge dev bug01
#将分支dev合并到分支master中,自动进行新的提交---需要先切换到master分支再合并
git checkout master
git merge dev
隐藏操作(Stash)
假设正在为产品新的功能编写/实现代码时,突然出现软件bug。这时必须将新编写的功能代码保留几个小时然后去处理bug的问题。在这段时间内不能提交代码,也不能丢弃的代码更改。 所以需要一些临时等待一段时间,可以存储部分更改(运行git stash
命令),然后再提交它
- 保存工作区修改的内容
git stash
- 查看已存在更改的列表
git stash list
- 恢复工作区的修改内容
git stash pop
Git 命令大全
Git 常用的图形化界面和版本控制器
- SourceTree 常用的git图形化管理界面,免费好用
- Gitlab 公司常用的远程代码仓库管理器---得要学会用