记录工作中鲜少记得的git操作
前言
关于git,我很多时候使用的是小乌龟。所谓工欲善其事必先利其器,一个好的工具,会使工作效率事半功倍。但是工具再好,从事it这行,终究是知其然并知其所以然,否则永远只是个技术搬运工。想清楚之后,就有意识的看看git book,学习并使用git命令,工作中也记录一些命令。以下是工作中比较常用但又比较冷门的git命令
git日志导出
这个常用于写工作周报的时候,我一般很难清晰的记得一周干了啥,所以每次都需要去看git日志。后来仔细想了下,应该有个命令可以直接导出git日志,所以就去git book上面找了下。
--no-merges
:忽略分支合并日志--reverse
:按照时间升序排序--since
:几天前,或者日志开始时间(6天前)--committer
:提交者(author)- 一般执行之后,就会在根目录中生成
gitlog.txt
文件 - 如果
gitlog.txt
已存在,会覆盖里面内容
git log --pretty=format:"%s" --since="6 days ago" --committer="author" --no-merges --reverse > gitlog.txt
不想覆盖使用>>
git log --pretty=format:"%s" --since="6 days ago" --committer="author" --no-merges --reverse >> gitlog.txt
git日志,根据特定格式导出,这个我不怎么常用,但是用到过,所以记录以下
git log --committer="author" --after="2023-3-1" --before="2023-5-1" --pretty=format:"%an %ad : %s" --date=short --no-merges --reverse
以上是导出2023-03-01——2023-05-01之前的git日志,用【提交者 修订日期:提交说明】的方式
git log --pretty=format
常用的选项
选项 | 说明 |
---|---|
%H | 提交的完整哈希值 |
%h | 提交的简写哈希值 |
%T | 树的完整哈希值 |
%t | 树的简写哈希值 |
%P | 父提交的完整哈希值 |
%p | 父提交的简写哈希值 |
%an | 作者名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 --date=选项 来定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期(距今多长时间) |
%s | 提交说明 |
合并posture的某次提交到dev分支上
很多时候需要合并提交,但是又不需要合并所有提交,所以就不能使用git pull
、git merge origin/xxx
、git push
。于是我有借助了度娘和git book
的知识库,主要是获取commit id
,然后git cherry-pick commit-id
# 切换到posture分支上
git checkout posture
# 查看日志
git log
查询到需要合并分支的commit id: 13f9ee9c3437ba12f078afd8ff30d5335d863889
复制后面那串sha-1
码(13f9ee9c3437ba12f078afd8ff30d5335d863889)
# 切换到dev分支
git checkout dev
# 先拉取信息,更新到最新信息
git pull
# 合并某次提交
git cherry-pick 13f9ee9c3437ba12f078afd8ff30d5335d863889
# 推送到远端
git push origin dev
题外之话
之前也踩过坑,当我想要合并某个分支的时候,发现push没有成功,最后还是很合并了所有代码。所以还是要注意看git的报错信息,和看下merge、push是否成功。
基于dev分支创建test分支
当前分支dev
主要是基于本地dev的代码创建test分支
git checkout -b test
git push origin test
# 跟远程关联
git branch --set-upstream-to=origin/test test
# 合并本地dev
git merge dev
# 查看缓存
git ls-files -c
# 推送到远程
git push
删除分支及远程分支
注意:不能在当前的分支上,需要切换到别的分支上
删除分支localBranchName
# 删除本地分支
git branch -d localBranchName
# 删除远程分支
git push origin --delete remoteBranchName
重命名分支
将1.5-timezone
重命名为1.5-utcoffset
# 切换到1.5-timezone分支
git checkout 1.5-timezone
# 重命名本地分支
git branch -m 1.5-utcoffset
# 删除远程分支
git push origin --delete 1.5-timezone
# 将上游分支重置为新本地分支的名称
git push origin -u 1.5-utcoffset
# 查看分支及对应的远程分支
git branch -vv
取消代理
# 查看代理
git config --global http.proxy
# 取消代理
git config --global --unset http.proxy
https
同理
一般开了vpn之后很容易报这个错,用以上方法可解决
fatal: unable to access 'xxx.git/': Failed to connect to 127.0.0.1 port 7890 after 2069 ms: Couldn't connect to server
其他命令
查看分支当前状态
git status
从以上输出信息可以看出:有两个文件被修改了,一个文件新增(yarn.lock
)
添加文件
- 添加特定文件是
add
后面跟具体文件名,如git add main.js
,获取是一类文件等等,同理 - 添加所有文件是使用
git add *
以下命令是添加所有文件
git add *
查看分支
这个一般都很常用,虽然没有git pull
和git push
那么常见,但是俗话说我可以不用,但是不能不知道。git branch
带-
的命令很多,但是我一般常用的就这几种,以下用表格的形式记录下
命令 | 说明 |
---|---|
git branch | 查看本地分支数 |
git branch -a | 查看本地及远程分支 |
git branch -v | 与git barnch同理,查看本地分支 |
git branch -vv | 查看本地及与之对应的远程分支 |
还有一个就是创建分支的时候比较常用的--创建并切换到该分支上:git checkout -b xxx
git clone 报错
这个踩坑较少,但是有点子费时我又刚好有点子兴趣,所以记录下子
git clone报错RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
git config --global http.version HTTP/1.1
参考链接:stackoverflow.com/questions/5…
然后又报了error:RPC failed; curl 18 transfer closed with outstanding read data remaining
后面上网查,竟然是因为网慢
这种情况经常发生,我的互联网连接速度很慢,我必须克隆一个相当大的 git 存储库。最常见的问题是连接关闭并且整个克隆被取消。
Cloning into 'large-repository'...
remote: Counting objects: 20248, done.
remote: Compressing objects: 100% (10204/10204), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
经过大量的尝试和错误以及大量的“远程端意外挂断”之后,我找到了一种适合我的方法。这个想法是首先进行浅层克隆,然后用其历史记录更新存储库。
$ git clone <http://github.com/large-repository> --depth 1
$ cd large-repository
$ git fetch --unshallow
成功了成功了
转载自:https://juejin.cn/post/7330835892275724329