#13 同一台机器上配置多个 Git 账户
Git 开发工具 2022-01-17读到微信公众号文章 本地如何配置多个 GitHub/Gitee 账号?,想起了几年前,面对这样的需求,我自己也是这么操作的。
#12 Git 命令
Git 开发工具 版本管理 2021-08-04看到有篇文章说是 git “新增”了 switch 和 restore 两个命令,仔细一看,原来就是 2019 年就引入了的两个命令,不过我确实没有用过。
这里重新整理一下现在 git 的命令。
git version
git version 2.30.2
apt list --installed | grep ^git
git-doc/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装]
git-extras/hirsute,hirsute,now 6.1.0-1 all [已安装]
git-flow/hirsute,hirsute,now 1.12.3-1 all [已安装]
git-man/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装,自动]
git-svn/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装]
git/hirsute,now 1:2.30.2-1ubuntu1 amd64 [已安装]
gitg/hirsute,now 3.32.1-1 amd64 [已安装]
gitk/hirsute,hirsute,now 1:2.30.2-1ubuntu1 all [已安装]
#11
使用 git push --force-with-lease
替代 git push --force
Git
2021-07-05
今天注意到了 git push 的一个参数 --force-with-lease
,可以在 Remote 有更新的时候不执行强推。
我之前考虑过会有这样的情况发生:我准备强推之前,会做最后一次拉代码检查,无误之后 force push。但是这个检查和 push 之间有一个时间差,会不会在这期间有别的小可爱提交了代码呢?
这种情况是完全可能存在的,就像是线程安全问题,只是团队的规模消减了我对这种情况的担心。
但是 --force-with-lease
参数可以彻底化解我的这种担忧,我决定以后就改用这个参数了。
#10 Git 分支管理策略
Git 项目管理 2021-04-07#9 在 Git 历史记录中搜索
Git 2020-06-12搜索提交信息
git log --grep=fix: --oneline --after='2018-07-01' --author=catroll
搜索历史文件
git grep -C3 sign_position $(git rev-list --all)
搜索 diff 内容
git log -G'前置'
git log -G'前置' -p | grep '前置' -C5
git log -G'前置' --oneline --name-status
-S<string> --pickaxe-regex
和 -G<regex>
作用相近,
不过 -S
只会列出搜索内容增删的相关信息,也就是所在行修改了,但是搜索内容没有变化的会忽略
#8 Git 链接文件
Git Windows 2020-03-22#7 获取文件添加到 git 的时间
开发工具 Git 2019-08-01git log --diff-filter=A --follow --format="%h %ad %ce" -1 -- requirements.txt | cat
# 6a0eebf 2019-05-22 19-47-09 bobo@example.com
#6 Git Submodule
Git 2019-01-03#5 Git 补丁包
Git 开发工具 版本管理 2018-08-01git diff
对应diff
命令git apply
对应patch
命令
git diff v1.2.1 v1.2.2 > v1.2.1_v1.2.2.patch
git apply --check v1.2.1_v1.2.2.patch
git apply -v --whitespace=warn v1.2.1_v1.2.2.patch
有部分文档中说 git apply
和 patch
在一些细节上实现不一致,需要留意。但我轻量级使用,没有遇到过什么问题。
#4 Git 与换行符
Git 2017-12-07#3 使用 git-daemon
Git 开发工具 2017-03-15有时需要临时分享一个仓库给朋友,我们可以用 SSH 协议:
git clone ssh://catroll@192.168.64.234/home/catroll/Projects/catroll/lego
其实 git-daemon 是一个更好的方法。
#2 Git: matches more than one
Git 2016-09-01$ git push origin v1.1.2 --delete
error: 目标引用规格 v1.1.2 匹配超过一个
error: 无法推送一些引用到 'gitee.com:catroll/markjour'
$ git push origin v1.1.2 --delete
error: dst refspec v1.1.2 matches more than one
error: failed to push some refs to 'gitee.com:catroll/markjour'
解决办法:
# 如果要删除的是分支
git push origin refs/heads/v1.0.32 --delete
To gitee.com:catroll/markjour
- [deleted] v1.0.32
# 如果要删除的是 Tag
git push origin refs/tags/v1.0.32 --delete
#1 Git: 远程引用不存在
Git 2016-01-31删除远程分支时报错:
git push --delete origin new
error: 无法删除 'new':远程引用不存在
error: 无法推送一些引用到 'gitee.com:catroll/django-admin'
如果是英文环境就是报:
git push --delete origin new
error: unable to delete 'new': remote ref does not exist
error: failed to push some refs to 'gitee.com:catroll/django-admin'
一般是这个分支已经被别人删除了。
Solution
git branch -d -r origin/new