安装Git
- Windows: 官网自行安装
- Mac: Mac一般
自带Git
无需安装 - Linux: 服务器上,
yum install -y git
配置Git
Git使用三种级别的配置文件
系统 > 全局 > 本地
- 系统: 适用于系统上所有用户和项目, 通常位于 /etc/.gitconfig
- 文件名为
gitconfig
, 位于安装Git目录下的etc
文件夹内, 系统层面的, 对本系统有效
- 文件名为
- 全局: 特定于当前用户, 通常位于 ~/.gitconfig || user/.gitconfig
- 文件名为
.gitconfig
, 位于用户根目录, C:\User<user_name>\.gitconfig, 用户层面的, 对本用户有效
- 文件名为
- 本地: 特定于当前Git仓库, 位于 .git/config
只会影响该仓库的操作
- 文件名为
config
, 位于项目目录下的.git
文件夹内, 仓库层面的, 只对本仓库有效
- 文件名为
# 查看配置
git config --list
git config -l # 查看所有配置(包括仓库,用户,系统配置)
git config --system -l
git config --global -l
git config --local -l
# 新增配置
git config --local --add core.autocrlf false
# 修改配置
# git config --local 需要修改的参数 需要修改的值
git config --local core.autocrlf false
# 删除配置
git config --local --unset core.autocrlf false
设置用户签名
设置用户签名是为了确保每次提交都有明确的作者信息
标识用户, 区分不同的开发人员
每次提交时, Git都会使用这些信息来记录提交者的身份
邮箱不一定是真实邮箱 可以是虚拟邮箱
# 全局设置, 作为所有Git仓库的默认签名
# 去掉 --global 在`该仓库目录`下运行则应用于当前仓库
git config --global user.name "xxx"
git config --global user.email "xxx"
# 查看用户签名
git config user.name
git config user.email
- 也可以进入 user/.gitconfig 配置文件中查看
- 如果是当前仓库的特定提交者 则进入 当前项目仓库的
.git 文件夹下gitconfig
配置
基本配置说明
[user] # 设置提交代码时的用户签名信息
name = Your Name
email = your@email.com
[core] # 核心配置, 如: 默认的文本编辑器
editor = vim
fscache = true # 用于启用或禁用文件系统缓存
# 用于指定一个排除文件,其中包含要忽略的文件和目录的规则
excludesfile = '~/.gitignore'
[alias] # 设置 Git 命令别名(很少用到感觉,可以玩玩)
co = checkout
ci = commit
br = branch
st = status
[color] # 是否使用彩色显示, 还有其它颜色输出配置
ui = auto
[push] # 设置推送行为
default = matching
[pull] # 设置拉取行为
ff-only
初始化本地仓库
# 将当前目录初始化为一个本地的Git仓库 或 创建一个repo目录的Git仓库
# 会在本地生成一个.git文件夹用来追踪仓库的所有变更
git init [repo]
# 指定当前目录成为中心仓库(裸仓库) 或 创建一个repo.git目录的裸仓库
# 没有工作空间, 该仓库只保存Git历史提交版本信息, 不允许用户在上面进行各种Git操作(只能push和fetch)
# 在当前目录生成不带.git的文件夹, 即把.git文件夹里的内容直接生成到当前目录
git init --bare [<repo.git>]
一般来说, 一个裸库往往用来被创建用于作为大家一起工作的共享库, 每个人都可以往里面push自己的本地修改; 裸仓库通常命名方式是在库名后加上
.git
- 裸仓库就是作为远程仓库进行
代码共享和协作
的 - 裸仓库虽然没有工作目录,但它
仍然保存了所有提交的版本信息和代码内容
- 裸仓库将所有提交的数据存储在Git的内部结构中, objects目录中
- github上面的clone地址就是一个裸仓库地址
- 故github上的代码库是一个裸仓库才可以作为共享库!
SSH
ssh是专为远程登录会话和其他网络服务提供安全性的一种协议
Git是分布式的代码管理工具, 有四种协议: 本地协议file/Git协议/HTTP协议/SSH协议
- 配置用户签名
git config --global user.name "xxx"
git config --global user.email "xxx@com"
- 查看是否设置了ssh
cd ~/.ssh # 有则删除重新设置
- 生成公钥和私钥
ssh-keygen -t rsa -C "你的邮箱"
# -t rsa 表示类型是rsa类型(非对称加密)
# -C 邮箱地址可以不用设置
# 直接回车就行, 不用设置密码
- 复制公钥配置到Git服务器SSH配置
cat ~/.ssh/id_rsa.pub
- 每次pull、push都需要输入密码时
git config --global credential.helper store
# 用于配置Git凭证储存的命令, 会记录下账号与密码
本地仓库建立远程仓库的连接
- 添加远程仓库
# origin: 远程仓库的名称【可自定义】
# <repo.git> 远程仓库地址
git remote add origin <repo.git>
- 本地分支push到远程仓库分支
# 因为已经连接了远程仓库, 直接push
# -u 第一次推送使用-u选项, 将本地分支与远程master分支作关联
# origin 远程仓库名称 master 远程分支
# 下面是 git push --set-upstream origin master 的缩写版本
git push -u origin master
本地仓库创建新分支提交到远程新分支
- 创建本地新分支
git checkout -b xxx
# 从远程某个分支下创建一个新分支, 并会跟踪远程分支
# 不设置 origin/remote_branch_name 则在当前分支下创建
git checkout -b new_branch_name origin/remote_branch_name
- 提交到远程新分支
git push -u origin new-branch
本地仓库状态说明
-
内容状态: 表示内容的改变
- 工作区
- 暂存区
- 提交区
-
文件状态
- 已跟踪
- 未跟踪
- 添加文件: 工作区
- 文件添加到
暂存区
使用下面命令(同时文件被跟踪)
git add 文件名 + 后缀 # 添加文件内容到暂存区
git add . # 添加所有文件
- 想要删除暂存区的内容则使用如下命令
git rm --cached <file>
- 然后是提交代码到本地库, 形成自己的历史版本
git commit -m "xxxx" # 从暂存区中提交所有文件
git commit -m "xxxx" 文件名 + 后缀 # 从暂存区中的提交指定文件
# 扩展
git commit -a -m "xxxx" # 从工作区中提交所有文件
git commit -a -m "xxxx" 文件名 + 后缀 # 从工作区中的提交指定文件
命令详细
常用命令
git config
: 参考配置文件说明git version / git -v
: 查看当前Git版本git init
: 创建一个空的代码储存库git clone <Project Url>
: 将现用的储存库进行复制git clone -o <name> <Project Url>
: 设置远程仓库主机名的简短名称, 默认origin
远程仓库类命令
git remote
: 显示所有远程仓库简短名称- 显示 origin # 表示就一个远程仓库简短名称
git remote -v
: 查看所有远程仓库详细信息- 显示 origin url # 前一个表示远程仓库名称 后一个是远程仓库地址
- fecth: 表示该仓库用于从远程仓库获取更新
- fush: 表示该仓库用于将本地提交推送到远程仓库操作
git remote show origin
: 展示远程仓库origin的详细信息(包含本地分支跟踪的远程分支信息)git remote add origin <远程仓库地址>
: 本地仓库与远程仓库建立关联git remote rm origin
: 删除已经添加的远程仓库 [rm: remove]git remote add <自定义名称> <另一个远程仓库地址>
: 表示添加多个远程仓库- origin | <自定义名称> 都是远程仓库名称
git remote rename <oldName> <newName>
: 重命名远程仓库的简短名称git remote set-url origin <新的远程仓库地址>
: 当多个仓库时, 更新远程仓库地址 url
分支类命令
git branch
: 列出本地分支git branch -a
: 列出所有分支(本地和远程)git branch -r
: 列出远程分支git branch -vv
: 列出本地分支与远程分支关联以及最新的提交git branch <branch_name>
: 创建新分支git branch -d <branch_name>
: 删除分支git branch -D <branch_name>
: 强制删除分支git checkout <branch_name
: 切换分支git checkout -b <branch_name>
: 创建并切换分支git branch --set-upstream dev origin/dev
: 手动建立本地dev与origin/dev分支的跟踪- 默认clone时, 本地同名分支就与远程同名分支建立了跟踪关系
代码存储类命令
git add <file>
: 将单个文件添加到暂存区git add .
: 将所有修改过的文件添加到暂存区git commit -m "xxx"
: 将暂存区的代码提交到本地存储库git status
: 查看有多少文件需要得到关注
- 更详细命令参考本地仓库状态说明
代码上传合并类命令
拉取代码
git fetch
: 取回所有分支(branch)的更新- 它会将远程仓库中的更新下载到本地,并更新本地仓库中远程分支的指针位置,但不会合并
git fetch origin branchA
: 取回指定远程仓库的指定分支的更新git merge origin/branchA
/git rebase origin/branchA
: 在当前分支上合并远程分支git pull origin master
: 将拉取当前分支的默认远程存储库的更改- 实际上是
git fetch
和git merge
的组合 - 因为执行了git fetch, 故会看到其他分支的更新但并没有合并
- 实际上是
git pull origin
: 当前分支与远程分支已建立跟踪可以省略后面的远程分支名git pull
: 如果当前分支只有一个跟踪关系, 则可以简写git pull <远程仓库名> <远程分支名>:<本地分支名>
: 将远程仓库的分支合并到指定的本地分支git pull origin master
: 将远程仓库的master分支合并到 当前分支git pull --rebase
: 一种方式, 区别在于- git pull是
git pull --merge
的缩写 - merge 是合并成一个commit提交节点
- rebase 是将两个分支的所有commit提交节点合并成一条线,线性结构
- git pull是
提交代码
git push
回退代码
git reset