文章目录
1. git安装与配置
1.1 git安装
查看都有哪个版本的GIT
which -a git
查看自己使用的git版本
git --version
使用指定版本的git
vim .bash_profile(mac)
export PATH= 安装路径:$PATH
sourve .bash_parofile(加载)
1.2 git基本配置
- 增删改查
基本设置
git config --global user.name "name"
git config --global user.email "email"
帮助文档
git help config
man git-config
增加用户
git config --global --add user.name "name"
git config user.name(查看当前用户)
删除用户
git congif --get user.name
git config --list --global(查看当前配置信息)
git config --global --unset.name "anme"(删除当前name用户)
修改用户
git config --golbal user.name "na"
查看所有用户
git config --get user.name
git config --list --global
# 使用默认编辑器
git config --global core.editor "vim"
- 子命令
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.lol "log --oneline"
2. git基本工作流程
git的四种 对象
- blob
- tree
- commit
- tag:固定的历史提交
git仓库
git仓库的创建
git init 目录
git裸仓库
git init --bare 目录
将已有文件纳入git
直接进入这个目录下,然后执行
git init即可
或者
git clone
git clone 裸仓库 新名字
- 工作区
- 暂存区
- 历史提交
工作区—暂存区—历史记录–暂存区or工作区
- git add
- git commit
- git status
- git rm 删除
- git mv移动重命名
- gitignore 不添加某些东西
git add a b 将a和b加入暂存区
git status 查看提交
git commit -m "提交信息" #提交到历史仓库
git rm file 删除工作区和历史仓库的文件
git rm --cached file 仅仅删除暂存区的文件
git mv file newFile 重命名
将当前路径下的所有文件都添加都暂存区
git add .
git add -A
忽略目录下这些文件,不跟踪这些文件
vim .gitigonore
通过通配符的样式忽略
.[oa] 忽略以.o和.a结尾的文件
!a.o 不要忽略这个文件
**/res 匹配零个或者多个目录
3. git暂存区
- 工作区
- git对象库
4.git本地分支与合并
- git btanch 创建分支
- git tag 做标记
- git chechout 切换分支
- git stash
- git merge 合并分支
5.git-关注修改
5.1 撤销修改
- 这个文档在工作区被修改后还没
git add .
第一步:撤销工作区的修改
git checkout -- file_name
- 这个文档在工作区被修改后
git add .
到了暂存区
第一步:撤销缓存区的修改
git reset HEAD file_name
第二步:撤销工作区的修改
git checkout -- file_name
- 这个文档被
commit file_name -m "注释"
撤销本次提交,回退本节
5.2 管理修改
- 第一次
vim a.txt
- 添加到暂存区
git add a.txt
后第二次vim a.txt
- 然后
git commit -m "注释"
git status
止呕会发现第二次的vim a.txt
更改没有修改成功
-
第一次修改->
git add
->第二次修改->git commit
-
你看,我们前面讲了,Git管理的是修改,当你用
git add
命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit
只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
5.3 工作区和暂存区
- 工作区
- 电脑山能看到的目录
- 版本库
- 工作区有一个
.git
的文件 git add
将文件添加到暂存区git commit
a将暂存区内容提交到当前分区
- 工作区有一个
5.4 版本回退
git reset -- hard HEAD^
git reglog
git reset -- hard 版本号
6. 分支管理
6.1. 创建与合并分支
- 新建分支,并切换
git checkout -b bran_name
- 查看当前分支
git branch
- 切换分支
git checkout master
- 合并other分支到当前分支
git merge other_btanch
- 删除分支
git branch -d branch_name
6.2 解决冲突
- 假设在a分支进行修改成a1然后提交,再回到b分支将文件改成b1提交,这个时候试图合并a1分支和b1分支,就会出现冲突。这个是时候编辑源文件改成想修改的样子,修改之后在合并分支,然后删除另外一个分支
6.3 bug分支
- 当需要保存当前工作区内容但是还不提交的情况下
git stash
储藏当前工作现场
- 回到分区后查看储藏的分区在哪里
git stash list
- 恢复储藏分区的方式
git stash apply
恢复,但是stash
内容并不删除,需要调用git stash drop
来删除git stash pop
恢复的同时吧stash
内容也删除了
6.4 Feature分支
- 如果要丢弃一个还没有被合并过的分支
git branch -D <name?
6.5 多人协作
- 从远程仓库克隆的时候,实际上GIT自动把本地的
master
分支和远程的master
分支合并,且远程仓库的默认名称是origin
git remote
ORgit remote -v
可以获取更详细的信息- 推送分支
git push origin master
:制定本地分支- 如果要推送其他分支
git push origin <name>
1. git config -global user.email "xxx@xx.com"
2. git config -global user.name "xxx"
## 番外篇
1. git init 激活git管理
2. git add 加入缓存区
3. git commit -m "msg" 提交到版本库
4. git status 查看状态
5. git diff 查看文件修改了什么内容
6. git log 查看提交日志
7. git log --pretty=oneline 将日志显示在一行
8. git reset --hard HEAD^ 向前退一版本
9, git reset --hard xxxxx 回退到指定版本
10. git reflog 显示每一次命令
11. git checkout -- fileName 撤销本地对文件的修改,回退到commit或者add后的状态
12. git reset HEAD 'filename' 将文件filename的暂存区修改放弃
新增: git submodle
git-submodule 操作, 直接把第三方的版本库合并到自己的库中.
在自己的代码库中新增第三方的代码库
git submodule add https://git.oschina.net/gaofeifps/leg.git. lig/xxx_name
新增后会有一个新文件:.gitmodules
批量针对每一个子库执行指令:
git submodule foreach 这里跟指令,会针对每一个子库都执行。
比如:
git submodule foreach git checkout master
- 删除子库的命令
git submodule deinit <submodule-name>
查看本地有哪些三方模块可以查看 .gitmodules
文件
总结:
1. 新增
git submodule add <url> <path>
2. 更新/提交
在子模块里面,执行原本的git命令就好。
3. 批量让子库执行指令
git submodule foreach ‘cmd“
4. 删除子模块
git submodel deinit 子模块名字
5. 下载最新的代码后下载新代码里的子模块代码
git submodel init
git submodel uodate
可以合并为一个指令:
git submodule update --init --recursive
git乱码
需要设置环境变量: export LESSCHARSET=utf-8
# fix git status garbled
git config --global core.quotepath false
git config --global i18n.logoutputencoding utf-8
# fix git commit garbled
git config --global i18n.commitencoding utf-8