git的使用记录

2021-01-21, updated 2021-12-19

记录git的使用方法

git log

  1. 查看每次提交的diff
1
git log -p filename
  1. 查看filename相关的commit记录
1
git log filename
  1. 查看某个人的提交记录
1
git log author="username" filename
  1. 查看变更文件
1
git log --raw
  1. 查看每次提交的简略统计信息
1
git log --stat

git show命令

git show命令用于显示各种类型的对象。

使用方法

1
git show [options] <object>...

描述

显示一个或多个对象(blobs,树,标签和提交)。

该命令采用适用于git diff-tree命令的选项来控制如何显示提交引入的更改。

示例

以下是一些示例

  1. 显示标签v1.0.0,以及标签指向的对象
1
git show v1.0.0
  1. 显示标签v1.0.0指向的树
1
git show v1.0.0^{tree}
  1. 显示v1.0.0指向的提交的主题
1
git show -s --format=%s v1.0.0^{commit}
  1. 显示Documentation/README文件的内容,它们是next分支的第10次最后一次提交的内容
1
git show next~10:Documentation/README
  1. 将Makefile的内容连接到分支主控的头部
1
git show master:Makefile master:t/Makefile

git reset命令

撤销没有push的commit

1
git reset --soft HEAD^

HEAD^的意思是上一个版本

git commit命令

提交修改内容

1
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)

1
git rev-parse HEAD

获取short commit id(如:bb4f92a)

1
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 删除 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版本升级

1
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命令输出中的显示问题,

1
git config --global core.quotepath false

Git如何合并某一次commit的内容到指定分支

Cherry pick 支持一次转移多个提交。

1
git cherry-pick <HashA> <HashB>

上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。

如果想要转移一系列的连续提交,可以使用下面的简便语法。

1
$ git cherry-pick A..B 

上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。

注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。

1
$ git cherry-pick A^..B 

示例

将分支dev1的某一次提交合并到dev2分支

1
2
git checkout dev2  
git cherry-pick 62ecb3 

将分支dev1的多次提交合并到dev2分支

1
2
git checkout dev2  
git cherry-pick 62ecb3 62ecb6

参考链接: https://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

words: 1558 tags: git