git的使用记录
2021-01-21, updated 2021-12-19
记录git的使用方法
git log
- 查看每次提交的diff
git log -p filename
- 查看filename相关的commit记录
git log filename
- 查看某个人的提交记录
git log author="username" filename
- 查看变更文件
git log --raw
- 查看每次提交的简略统计信息
git log --stat
git show命令
git show
命令用于显示各种类型的对象。
使用方法
git show [options] <object>...
描述
显示一个或多个对象(blobs
,树,标签和提交)。
- 提交,它显示日志消息和文本差异。它还以
git diff-tree --cc
生成的特殊格式呈现合并提交。 - 标签,它显示标签消息和引用对象。
- 树,它显示的名称(相当于使用
git ls-tree
和--name-only
选项)。 - blobs,显示了普通的内容。
该命令采用适用于git diff-tree
命令的选项来控制如何显示提交引入的更改。
示例
以下是一些示例
- 显示标签v1.0.0,以及标签指向的对象
git show v1.0.0
- 显示标签v1.0.0指向的树
git show v1.0.0^{tree}
- 显示v1.0.0指向的提交的主题
git show -s --format=%s v1.0.0^{commit}
- 显示Documentation/README文件的内容,它们是next分支的第10次最后一次提交的内容
git show next~10:Documentation/README
- 将Makefile的内容连接到分支主控的头部
git show master:Makefile master:t/Makefile
git reset命令
撤销没有push的commit
git reset --soft HEAD^
HEAD^的意思是上一个版本
git commit命令
提交修改内容
git commit -m "change log" filename
git修改commit注释 已提交但并未push
只需要修改最新的一次commit注释
之后执行git commit --amend
, 之后便可以利用vim来进行编辑,编辑之后注释为create new file 2 after change。(vim可按i键进入编辑模式,esc退出编辑模式,ZZ保存并退出。更多操作可查阅vim相关资料)
git rev-parse
获取完整commit id(如:bb4f92a7d4cbafb67d259edea5a1fa2dd6b4cc7a)
git rev-parse HEAD
获取short commit id(如:bb4f92a)
git rev-parse --short HEAD
git clean
首先确认要删除的文件 git clean -fd -n
如果以上命令给出的文件列表是你想删除的, 那么接下来执行
git clean -f -d或者git clean -fd就可以了。
其中-f表示文件 -d表示目录, 如果还要删除.gitignore中的文件那么再加上-x (-x对我来说没用)
如果git submodule中也存在需要删除的文件那么需要再加个-f, 变成git clean -dff
# 删除 untracked files
git clean -f
# 连 untracked 的目录也一起删掉
git clean -fd
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
其它杂项
windows 平台git版本升级
git update-git-for-windows
使用中遇到的问题
Git error: unable to stat just-written file…
解释
无法统计刚刚写入的文件。
解决
文件名不被允许使用,给文件重命名即可。
tip
本次出错原因:windows 不能命名 con.png 另:由系统保留的设备名字不能用作文件名 CON,PRN,AUX,CLOCK$,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1
问题
git status中文文件名编码问题解决
在默认设置下,中文文件名在工作区状态输出,中文名不能正确显示,而是显示为八进制的字符编码。
通过将git配置变量 core.quotepath 设置为false,就可以解决中文文件名称在这些Git命令输出中的显示问题,
git config --global core.quotepath false
Git如何合并某一次commit的内容到指定分支
Cherry pick 支持一次转移多个提交。
git cherry-pick <HashA> <HashB>
上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。
如果想要转移一系列的连续提交,可以使用下面的简便语法。
$ git cherry-pick A..B
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
$ git cherry-pick A^..B
示例
将分支dev1的某一次提交合并到dev2分支
git checkout dev2
git cherry-pick 62ecb3
将分支dev1的多次提交合并到dev2分支
git checkout dev2
git cherry-pick 62ecb3 62ecb6
参考链接: https://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html