git常用命令
git log 命令
git log -n
显示前N条日志
git log –stat -n
显示简要的增改行数统计,每次提交文件的变更统计
git log –pretty=format:” “
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 -date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
1 | git log --pretty=format:" %s" -3 |
git Commit message
Commit message 都包括三个部分:Header,Body 和 Footer。1
2
3
4
5<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)
type | 意义 |
---|---|
feat | 新功能(feature) |
fix | 修补bug |
docs | 文档(documentation) |
style | 格式(不影响代码运行的变动) |
refactor | 重构(即不是新增功能,也不是修改bug的代码变动) |
test | 增加测试 |
chore | 构建过程或辅助工具的变动 |
scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
subject是 commit 目的的简短描述,不超过50个字符。
以动词开头,使用第一人称现在时,比如change,而不是changed或changes
第一个字母小写
结尾不加句号(.)
总结:commit message应包含type+":"+subject
git issues
1 | // 关闭一个 |
git branch
1 | 查看所有分支(前面带*号的代表你当前工作目录所处的分支) |
git config
1 | git config --global user.name openks |
git提交流程
为了保持提交记录的干净1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25// 从服务器拉代码
git pull
// 本地修改1
git commit -am "c1"
// 本地修改2
git commit -am "c2"
// 本地修改3
git commit -am "c3"
// 1,2,3修改为一个功能先合并提交
// 即本地rebase
git rebase -i
git rebase -i SHA1
git rebase -i HEAD~5
// 弹出编辑框 点击insert进入编辑模式 保留第一个pick 其他的pick改为s 然后esc :wq
// 然后从远程服务器拉代码
git pull
// 如果不冲突则最好 直接push到服务器
git push
// 如果冲突则merage合并冲突
git add .
git commit -am "合并"
// 再次rebase 重新合并代码
git rebase
// 然后再push到服务器
git push
git仓库备份
需求很简单
在oschina
上做主要的代码,在coding
做代码备份
- 首先在
oschina
和coding
上分别创建项目test_git_mirroe
- 从
oschina
上clone
代码git clone https://git.oschina.net/openks/test_git_mirroe.git
- 跳转到项目目录
cd test_git_mirroe
- 添加coding的远程仓库
git remote add coding https://git.coding.net/zhuyangxing/test_git_mirroe.git
- 提交
coding
做镜像代码git push --mirror coding
- 以后在
test_git_mirroe
上提交的代码都提交到oschina
上 - 想要在
coding
上同步就执行git push --mirror coding
即可
git一次提交到两个仓库
修改.git
文件夹下的config
文件
在fetch
下添加想要提交的其他git
路径即可1
2
3
4[remote "origin"]
url = https://git.oschina.net/openks/test_git_mirroe.git
fetch = +refs/heads/*:refs/remotes/origin/*
url = new git url
git 文件对比
方法一:还是我最常用的命令行
1 | git diff <commitA> <commitB> filename |
方法二:在gitlab上对比查看
输入两个提交版本,会显示所有文件的版本差异相同的则不显示,具体如下图
再上一张我没找到问题的文件对比图,这确实是什么都没改啊(加了class这个除外)
git Tag
1 | # 创建tag |
关于GPG1
2
3
4
5
6
7# 生成GPG Key 根据提示选择加密方法 并输入相关信息即可
gpg --gen-key
# 验证GPG Key是否生成成功
gpg --list-keys
# 上边显示的是公钥,顺便也看一下与之匹配的私钥生成如何:
gpg --list-secret-keys
# 然后就可以使用gpg加密你的tag了
git patch
git中的patch有两种:
一是用git diff生成的标准patch
二是用git format-patch生成的Git专用Patch
git format-patch生成的patch在文件的前面会有diff的信息,还有提交者,时间等等
1 | # 使用git diff 生成patch (不建议) |
add 2018-01-17 10:42:13
把gitbash的编辑器设置为其他文本编辑器
git vim在rebase时经常崩溃并报如下错误
git rebase vim Caught deadly signal SEGV解决方案:
设置git的编辑器为notepad++(修改完后需关闭整个notepad++才可继续)1
git config --global core.editor \ "'C:/Program Files (x86)/Notepad++/notepad++.exe'”
查看本地rebase之前的提交记录
1 | //只在rebase的机器上能看到记录,从仓库拉下来的没有记录 |
add 2018-02-09 15:12:25
如何查看某次提交修改的文件有哪些
1 | # 查看从sha1开始最近 n次的提交改动了那些文件 |
以图表格式显示提交记录
1 | #以图表方式查看各分支之间的关系 |
比对最近几次已经commit代码改动内容
1 | # 想查看几次就在head后面该为几 |