1.基本认识
1.1 git仓库结构
git是一个版本控制工具,用来控制项目的版本更迭,结构如下
工作区(workspace):
本地项目存放文件的位置,所有本地的直接修改都是在工作区进行的。
缓存区(index/Stage):
顾名思义就是暂时存放文件的地方,通过是通过add命令将工作区的文件添加到缓冲区。
本地仓库(Repository):
本地git储存代码的地方,使用commit命令可以将缓存区的文件添加到本地仓库,推进仓库后才会生成一个版本号。
远程仓库(Remote):
线上git储存代码的地方,使用push,pull推送拉取代码,clone拷贝线上仓库到本地。
版本库:
当我们使用git管理文件时,比如git init时,这个时候,会多一个.git文件,我们把这个文件称之为版本库,但一般脚手架会搞定。
注:
1.工作区、缓存区、本地仓都是在本地的。
2.本地仓和远程仓是两个相互独立的仓库,各有自己的分支,当然本地和线上分支可一对一绑定。
1.2 忽略文件 .gitignore
# 此行为注释 会被Git忽略
# 忽略 node_modules/ 目录下所有的文件
node_modules
# 忽略所有.vscode结尾的文件
.vscode
# 忽略所有.md结尾的文件
*.md
# 但README.md 除外
!README.md
# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为txt文件
doc/**/*.txt
2.命令行
2.1 配置命令
//列出当前配置
git config --list
//列出本地仓配置
git config --local --list
//列出全局配置
git config --global --list
//列出系统配置
git config --system --list
//配置用户名
git config --global user.name "my.name"
//配置用户邮箱
git config --global user.email "my@github.com"
2.2 分支管理
//列出本地分支
git branch
//列出远程分支
git branch -r
//同时列出本地和远程的分支
git branch -a
//从本地分支切换到其它远程分支
git checkout [branch]
//先切本地分支,无该分支再去切远程分支,都无则报错
//创建并切换到新的分支(本地)
git checkout -b [branch]
//删除本地分支
git branch -d [branch]
//删除远程分支
git push -d origin [branch]
//将指定分支合并到当前分支(本地)
git merge [branch]
//查看哪些分支已经合并到当前分支
git branch --merged
//查看哪些分支没有合并到当前分支
git branch --no-merged
//查看各个分支最后一次提交的信息
git branch -v
//重命名分支(本地)
git branch -m [old_branch] [new_branch]
//重命名远程分支,只能将远程分支删掉,再推一次
//拉取远程分支并创建本地分支
git checkout -b [local_branch] origin/[remote_branch]
2.3 代码存取(版本控制)
//将工作区内容存到缓存区(当前分支)
git add .
//将缓存区内容存到本地仓(当前分支)
git commit -m '版本信息'
//将本地仓的内容推到远程仓(当前分支)
git push
//将远程仓内容拉取到工作区
git pull //拉取当前分支
git pull origin [branch] //拉取指定分支
//将某个远程仓库的更新,全部取回本地
git fetch [远程主机名]
//拉取指定远程分支的更新到本地
git fetch [远程主机名][分支名]
//本地仓库A的b分支可以拉取远程仓库B的a分支
//拉取指定远程分支的更新到本地指定分支
git fetch origin [远程分支]:[本地分支]
//撤销工作区的修改
git checkout -- '*' //撤销所有类型文件的修改
git checkout -- '*.tsx' //撤销tsx类型文件修改
//撤销缓存区内容(不覆盖工作区)
git reset HEAD '*'
//版本回滚
git reset [--soft | --mixed | --hard] [HEAD] <file>
//--hard 回退全部,包括HEAD、index、working tree
//--mixed 回退部分,包括HEAD、index(默认)
//--soft 只回退HEAD
git reset --mixed HEAD^ hello.php //回退 hello.php 文件的版本到上一个版本
//HEAD(当前版本)、HEAD^(上个版本)、HEAD^^(上上个版本)、HEAD^^^(上上上个版本)...
git reset --mixed bae128 //回退到指定版本
git reset --hard origin/master //将当前版本回退到与指定的远程分支一致
2.4 文件暂存
git允许我们将缓存区和工作区的改动暂存起来,并且存放暂存文件的 "区域" 是跨分支的。这个 "区域" 是一个队列,可以多次压入不同的更改,每执行一次释放动作只会弹出一个暂存改动。
//将改动内容压入暂存队列
git stash
//弹出暂存改动
git stash pop
//弹出上一次暂存改动
git stash pop index
//弹出指定暂存改动,index为队列下标
//查看暂存列表
git stash list
//清空暂存列表
git stash clear
//删除指定暂存
git stash drop index
//index为暂存改动在队列中的下标//精确到改动点进行暂存
git stash -p
2.5 查看相关信息
//查看文件状态
git status
//可能得到的结果如下:
//Changes not staged for commit
//表示得大概就是工作区有该内容,但是缓存区没有,需要我们 git add
//Changes to be committed
//一般而言,这个时候,文件放在缓存区了,我们需要 git commit
//nothing to commit, working tree clean
//这个时候,我们将本地的代码推送到远端即可
//查看个人历史操作记录(所有分支)
git reflog
//查看所有人操作记录(日志,所有分支)
git log
//查看git命令大纲
git help -a //命令大纲
git help //详细命令
//比较工作区和缓存区差异
git diff
//比较缓存区和本地库差异
git diff --cached
//比较工作区和本地库差异
git diff HEAD
//查看分支合并情况
gitk