Appearance
Git基础
TIP
名词:Remote:远程仓库 Repository:本地仓库 Index:暂存区 Workspace:工作区
WARNING
文章写于2020年,内容可能存在部分过时。
初始化
bash
git config --global user.name "name"
git config --global user.email "email@gmail.com"
git config --list
#只需要配置一次
git config --global user.name "name"
git config --global user.email "email@gmail.com"
git config --list
#只需要配置一次
bash
git init
git init [project-name]
git clone url
#选一个
git init
git init [project-name]
git clone url
#选一个
Git大致流程
- 工作区修改文件,添加文件
- 需要管理的文件提交至暂存区,不需要管理的使用.gitignore文件来忽略
- 暂存区文件提交到git仓库
- 提交远程仓库
提交
shell
#提交至暂存
git add filename
#提交至仓库
git commit -m"文件描述"
#修改最后一次提交
git commit --amend
#修改上一次提交(包括新文件变化)
gti commit --amemd <file1> <...>
#显示diff内容
git commit -v
#提交至暂存
git add filename
#提交至仓库
git commit -m"文件描述"
#修改最后一次提交
git commit --amend
#修改上一次提交(包括新文件变化)
gti commit --amemd <file1> <...>
#显示diff内容
git commit -v
提交的信息查询
文件删除
shell
git rm -f
git rm --cached <file>#删除暂存区文件
#改名,并放入index
git mv <> <>
git rm -f
git rm --cached <file>#删除暂存区文件
#改名,并放入index
git mv <> <>
回滚
shell
#将暂存区文件恢复到先前状态
git reset HEAD <file>
#将暂存区文件覆盖工作区
git checkout file
#移动HEAD的指向,指向上一个快照
#将HEAD移动后指向的快照回滚到暂存区
git reset --mixed HEAD~
#移动HEAD的指向,上一个快照
git reset --soft HEAD~
#移动HEAD的指向,指向上一个快照
#将HEAD移动后指向的快照回滚到暂存区
#将暂存区文件恢复到工作目录
git reset --hard HEAD~
#将暂存区文件恢复到先前状态
git reset HEAD <file>
#将暂存区文件覆盖工作区
git checkout file
#移动HEAD的指向,指向上一个快照
#将HEAD移动后指向的快照回滚到暂存区
git reset --mixed HEAD~
#移动HEAD的指向,上一个快照
git reset --soft HEAD~
#移动HEAD的指向,指向上一个快照
#将HEAD移动后指向的快照回滚到暂存区
#将暂存区文件恢复到工作目录
git reset --hard HEAD~
比较
- 快捷键
shell
j:左 k:右
b:向前一页 f:向后一页
u:向上半页 d:向下半页
g:跳转第一行 G:跳转最后一行
3g:跳转至第三行
/:从上向下搜索 ?:从下向上搜索
h:进入帮助文档 q:退出
j:左 k:右
b:向前一页 f:向后一页
u:向上半页 d:向下半页
g:跳转第一行 G:跳转最后一行
3g:跳转至第三行
/:从上向下搜索 ?:从下向上搜索
h:进入帮助文档 q:退出
- diff
shell
git diff #比较在那村去和工作目录
git diff id1 id2 #比较连个历史快照
git diff id #比较工作区和仓库中的快照
git diff --cached id #比较暂存区和仓库快照
git diff #比较在那村去和工作目录
git diff id1 id2 #比较连个历史快照
git diff id #比较工作区和仓库中的快照
git diff --cached id #比较暂存区和仓库快照
分支
- 创建
shell
#创建
git branch <分支名>
git branch #列出蹦迪分支
-r #列出远程分支
-a #列出所有分支
-d #删除分支
# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track [branch] [remote-branch]
#切换
git checkout <分支名>
#创建并切换
git checkout -b <分支名>
#显示master分支昨天的状态
git show master@{yesterday}
#创建
git branch <分支名>
git branch #列出蹦迪分支
-r #列出远程分支
-a #列出所有分支
-d #删除分支
# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track [branch] [remote-branch]
#切换
git checkout <分支名>
#创建并切换
git checkout -b <分支名>
#显示master分支昨天的状态
git show master@{yesterday}
- 合并
shell
#将指定的分支名合并到本分支
git merge <分支名>
#将指定的分支名合并到本分支
git merge <分支名>
- 冲突
- 进入存在冲突的文件进行修改
- 提交
- 其它
shell
git log --decorate --oneline
git log --decorate --oneline --graph --all
git log --decorate --oneline
git log --decorate --oneline --graph --all
远程仓库
- clone
git clone url
- 别名
shell
git remote -v #查看当前别名
git remote add origin url #链接
git remote -v #查看当前别名
git remote add origin url #链接
- 推送
git push origin master
- 拉取
pull =fetch + merge
shell
git fetch [远程库地址别名] [远程分支名]#拉取
git checkout #切换分支
git merge [远程库地址别名/远程分支名] #合并
git fetch [远程库地址别名] [远程分支名]#拉取
git checkout #切换分支
git merge [远程库地址别名/远程分支名] #合并
- ssh
shell
#检查是否存在ssh
cd ~/.ssh
#生成ssh
ssh-keygen -t rsa -C "Your email"
#检查是否存在ssh
cd ~/.ssh
#生成ssh
ssh-keygen -t rsa -C "Your email"
具体用法不过多赘述附上完整方法
忽略文件
shell
“/” 开头表示目录
“*” 通配多个字符
“?” 通配单个字符
“[]” 包含单个字符的匹配列表
“!” 表示不忽略(跟踪)匹配到的文件或目录
“/” 开头表示目录
“*” 通配多个字符
“?” 通配单个字符
“[]” 包含单个字符的匹配列表
“!” 表示不忽略(跟踪)匹配到的文件或目录
信息查询及其它
- checkout
- 从历史快照(或者暂存区域)中拷贝文件到工作目录
- 切换分支
shell
#提交状态
git status
#显示当前分支版本历史
git log
git log --decorate --oneline
git log --decorate --oneline --graph --all
#操作历史
git reflog
#提交状态
git status
#显示当前分支版本历史
git log
git log --decorate --oneline
git log --decorate --oneline --graph --all
#操作历史
git reflog
误传敏感文件
shell
#FILE_PATH:文件目录
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILE_PATH' --prune-empty --tag-name-filter cat -- --all
git push origin master --force
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
#FILE_PATH:文件目录
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILE_PATH' --prune-empty --tag-name-filter cat -- --all
git push origin master --force
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now