文章目录
文件添加及提交
文件添加
- 添加某一个文件:git add file.c
- 添加所有文件: git add .
- 目的
- 已经追踪的文件:将修改从工作区保存到暂存区
- 未追踪的文件,加入git 追踪范围
文件提交
-
将暂存区的所有内容提交到版本库
-
单步提交:
git commit -m "commit info"
-
一次性提交:
git commit -a
-
修改最后一个提交:
git commit --amend
文件删除
从工作目录和暂存区中删除
- git rm -f file.c
- 避免文件出现在未被跟踪的清单中
- 删除并提交后,该文件就不再被版本库追踪,但是版本库中仍然保存有这个文件的快照
从暂存区删除、工作目录中保留
-
命令
git rm --cached file.c
-
包括:库文件、可执行文件、日志、临时文件
从版本库中删除:版本回退到错误提交前的版本
-
撤销提交到暂存区:
git reset -soft SHA1
-
撤销到提交到工作区:
git reset -mixed SHA1
-
将工作区、暂存区和版本库恢复到制定版本:
git reset --hard SHA1
文件重命名
git mv old_file new_file
实际操作
文件移动:
mv old_file new_file
删除旧文件
git rm old_file
添加新文件
git add new_file
忽略文件
忽略文件模式:glob模式匹配
- 忽略以#开始的行
- 忽略某种格式结尾的文件:.[ao],以.a 或者*.o结尾的文件
- 某个库文件除外,不忽略:!clib.a
- 忽略临时文件:*~
- 忽略根目录下的某个文件:/text
- 忽略某个目录下的所有文件:libs/ 、libs/*.a
- 需要手动创建.gitignore文件
*.bin //忽略以*.bin文件
撤销本地修改
撤销工作区的修改
-
git checkout --file.c
-
让文件回到最近一次的commit 或者add的状态
-
若文件还没添加到暂存区:撤回后和版本库一样
-
若文件已添加到暂存区且做了修改:回到暂存区状态
撤销暂存区的内容
-
git reset HEAD file.c
-
将暂存区的修改撤销掉,重新放回工作区
撤销版本库的提交
-
git reset --hard SHA1(HEAD^) //丢弃
-
回退版本,并刷新到工作区
-
先前的提交对象还在版本库中孤独地存在着
差异比较
比较工作区和暂存区差异
-
git diff
-
查看尚未咱村文件有哪些新的修改
比较暂存区和版本库差异
-
git diff --cached [HEAD]
-
git diff --staged SHA
-
查看已暂存文件和上次提交的快照之间的差异
比较工作区和版本库差异
-
git diff HEAD(SHA1)
-
查看未暂存文件和最新提交文件快照的区别
比较两个版本之前差异
-
git diff SHA1 SHA2
-
查看不同版本之前的差异
压缩仓库
- 通过git gc 命令压缩增量存储单元,节省空间
- 快照的存储
- 对于修改的内容:做快照处理并保存
- 对于未修改的文件:做引用处理
高级命令使用
查看提交历史(git log)
-
参数选项
-
显示每个版本的修改差异
git log -p -2 |git shortlog
-
单行显示3条记录:
git log -3 --pretty=oneline |git log --oneline
-
图形化显示
git log --graph |gitk
-
查看最近2次提交的详细信息
git log -2
-
-
缉凶利器:git blame
-
查看一个文件每一行的提交记录
-
查看第6~11行代码是谁的提交
git blame file.c -L 6,+5
-
查看某个指定文件的提交修改历史
git log -C file.c git log -c file.c //查看修改的具体内容
-
-
展开版本之间的内容变化:
git log -p
-
显示最近的两次更新
git -n
-
指定位置开始的n个提交
git log HEAD^~2 -N
-
制定版本之间的提交
git log HEAD~3..HEAD
-
仅显示行数变化
git --stat
-
显示新增、增改、删除文件清单
git --name-status
-
仅显示跟指定作者相关的提交
git --author
-
仅显示跟制定提交者相关的提交
git --committer
-
指定日志的起点
git log SHA1
提交查找(git grep)
关键字查找
-
不同的参数查找
-
查找所有包含hello 字符串的文件:
git grep hello
-
显示关键字所在文件的查找
git grep -n hello
-
不显示内容,只显示文件名
git grep --name-only hello
-
查看每个文件里有多少个匹配
git grep -c hello
-
-
特定版本中查找
在v1.0版本里查找
git grep string v1.0
组合查找
-
逻辑关系:与查找、或查找
-
查找hello world
git grep -e hello --and -e world
-
查找hello 或world
git grep -e hello --or -e world
-
修改提交
增补提交
修改最后一次提交:修改提交信息或者内容
git commit --amend
反转提交
-
将原来的提交取消掉
git revert SHA1
-
反转多个提交:要先反转最后提交,防止冲突。这是原操作的逆操作都在暂存区,然后重新提交
git revert -n HEAD
git revert -n SHA1
git commit -m "revert HEAD and SHA1" 或
git revert conitue
如果涉及到冲突,可以使用git mergetool 或者修改文件解决
git 置位
复位
版本回退到工作区
git reset [--mixed] SHA1 //--mixed为默认参数,可以省略
软复位
回退到暂存区
git reset --soft SHA1
硬复位
从版本库和工作区中同时删除提交
git reset --hard SHA1
对提交重新排序
-
通过人机交互模式改写历史
-
git rebase -i HEAD~3
-
编辑提交信息
-
退出,git会重新排序提交
-
-
改写历史会重新生成新的commit
多个提交合成一个提交
-
首先定位到要合并的三个提交
git rebase -i HEAD~3
-
将最新的2个提交合并到他们的父提交上,需要VIM命令操作
HEAD\HEAD^:pick ->squash //实际是过程
-
修改提交信息
-
保存退出,查看提交历史
将一个提交分解成多个提交
-
进入交互模式
git rebase -i SHA1
-
定位需要修改的commit
pick->edit
-
检出到工作区、重新修改、多次提交.第一个提交的需要用到–amend
-
继续rebase
git rebase --continue