配置文件
用户配置
# --local 当前项目
# --global 全局配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
查看当前项目配置
git config -l
设置显示颜色使命令输出语法高亮
git config --global color.ui true
配置所在目录
# 仓库的Git配置文件存储位置
.git/config
# 全局配置文件
~/.gitconfig
文档解释
# 快进模式
Fast-forward
# 分支超前远程仓库一个提交
Your branch is ahead of 'origin/master' by 1 commit.
分支命名
类型 | 命名 |
---|---|
功能分支命名 | feature-vulcan |
bug分支命名 | issue-101 |
入门
初始化git
git init
查看工作区状态
git status
提交本地库
# 添加到暂存区(stage),可同时add多个文件
git add readme.txt
# 提交到仓库
# -m 版本注释,改动记录,必须指定
git commit -m "wrote a readme file"
# 添加到暂存区并提交
git commit -a -m "wrote a readme file"
文件对比
Git跟踪并管理的是修改
# 工作区和暂存区的比较
git diff
# 暂存区和分支的比较
git diff --cached
# 工作区和分支的比较
git diff HEAD
# 指定文件,--为命令终止符,防止歧义,将filename认为是分支
git diff HEAD -- filename
# 指定文件
git diff filename
查看日志
commitid不是由1递增,而是由sha1计算所得
# 日志按时间降序
git log
# 查看最后一次提交
git log -1
# 友好显示
# --pretty=oneline 显示为一行
#版本号 注释
#0357c98735c7e1d2c309a5c4c039e09cf5d8b210 test
git log --pretty=oneline
# --abbrev-commit 缩写commit的id,能唯一标识commit
git log --abbrev-commit
# --graph 查看分支情况
git log --graph
|\
| * 0fa998b and simple 分支
* | 8d6ddf8 & simple 主分支
|/
回退或前进版本
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向appendGPL
版本表示
- HEAD 当前版本
- HEAD^ 上一个版本
- HEAD~100 上100个版本
版本操作
# 本地库回退到上一个版本
git reset --hard head^
# 前进到指定版本
# 指定版本id,只需要指定前面一部分,可以明确版本即可
git reset --hard 0357c98735c7e1d2c309a
# 历史命令记录,可以查看版本id
git reflog
# 还原到最近一次git commit或git add时的状态
# 没有--,就变成了“切换到另一个分支”的命令
# 主分支名字为master
git checkout -- readme.txt
# 撤销暂存区的修改
git reset HEAD readme.txt
删除文件
# 方法一
rm test.txt
git add test.txt
git commit -m 'remove test.txt'
# 方法二
# 删除文件并添加到stage区
git rm test.txt
git commit -m 'remove test.txt'
远程仓库
本地Git仓库和GitHub仓库之间的传输是通过SSH加密,所以需要手动生成ssh密钥
创建密钥
# -t 密钥类型
# -C 添加注释
ssh-keygen -t rsa -C "liuende501@gmail.com"
id_rsa.pub 为公钥
操作远程仓库
# origin 为默认远程仓库名
git remote add origin git@github.com:shichen501/learngit.git
# 删除远程仓库
git remote rm origin
# 同时关联两个远程仓库
git remote add github git@github.com:michaelliao/learngit.git
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
推送本地仓库到远程仓库
# -u 第一次本地内容推送到远程仓库,并建立联系
git push -u origin master
# 提交远程仓库命令
git push origin master
确认指纹信息
https://help.github.com/articles/github-s-ssh-key-fingerprints/
The authenticity of host 'github.com (192.30.255.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
克隆远程仓库
# 默认以.git的无后缀文件名新建目录,也可以指定目录gitskills_dev
git clone git@github.com:shichen501/gitskills.git gitskills_dev
显示详细信息
github通过邮箱来识别身份
git remote -v
# fetch 表示抓取的远程库
origin git@github.com:michaelliao/learngit.git (fetch)
# push 表示推送的远程库
origin git@github.com:michaelliao/learngit.git (push)
远程分支操作
分支
创建分支
# 方法一
# 新建分支
git branch dev
# 切换分支
git checkout dev
# 方法二
# 创建并切换
git checkout -b dev
查看分支
git branch
删除分支
git branch -d dev
# 强制删除未合并分支
git branch -D feature-vulcan
合并指定分支到当前分支
# 同时合并工作区 版本库
git merge dev
# 合并冲突撤销
git merge --abort
合并冲突解决
# 1.修复冲突
# 2.提交
git commit -a -m 'fix'
禁用fast-forward
合并时禁用fast-forward,创建新的commit,可以在分支历史中查看分支信息,如果使用fast-forward,则会直接将分支合并到master,删除分支后,分支信息不可查
# 一旦指定了分支合并模式,则每次合并都使用相同的模式
git merge --no-ff -m "merge with no-ff" dev
远程仓库
# 推送其他分支
git push origin dev
# 创建远程的dev分支到本地
git checkout -b dev origin/dev
# 指定本地dev分支与远程origin/dev分支的链接
git branch --set-upstream-to origin/dev dev
# 抓取分支
git pull
现场存储
# 存储现场来修复bug
git stash
# 显示存储现场列表
git stash list
# 恢复现场
# 方法一
# 恢复现场 默认保存的最后一个即stash@{0}
git stash apply
# 删除现场
git stash drop
# 方法二
# 恢复并删除现场
git stash pop
# 指定恢复列表
git stash apply stash@{0}
# 清空现场列表
git stash clear
标签
创建标签
# 创建标签
git tag v1.0
# 创建标签
# 指定标签id
git tag v0.9 6224937
# 创建带有说明的tag,a为annotated
git tag -a v0.1 -m "version 0.1 released" 3628164
查看标签
# 标签列表
# 标签不是按时间顺序列出,而是按字母排序的
git tag
# 显示以字符串v1.开始的tag
git tag -l v1.*
# 显示标签详情
git show tagname
私钥签名标签
# 先指定config的gpg.program 为gpg2
git config --global gpg.program gpg2
远程仓库
# 推送标签到远程仓库
git push origin v1.0
# 推送所有标签到远程仓库
git push origin --tags
删除标签
# 删除标签
git tag -d v0.1
# 删除远程标签
# 删除本地标签
git tag -d v0.1
# 删除远程标签
git push origin :refs/tags/v0.1
获取标签代码
git checkout tagname
忽略文件
新建文件.gitignore,并添加到版本库里
强制添加忽略文件到版版本库
git add -f config.txt
检查忽略文件所在规则位置
git check-ignore -v config.txt
忽略规则
表达式 | 说明 |
---|---|
.libs/ | 忽略指定目录下的所有文件 |
*.swf | 忽略指定后缀名的文件 |
ext/config* | 忽略指定字符串开始的文件 |
!app/logs/.gitkeep | 除!后面的文件 |
配置别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
创建远程仓库
# 将公钥{id_rsa.pub}导入到文件
/home/git/.ssh/authorized_keys
# 新建空仓库(在当前用户主目录下,/home/git)
# 默认以.git结尾
sudo git init --bare sample.git
# 修改库权限
sudo chown -R git:git sample.git
# git 禁止远程登录/etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell