git
upd
git reflog的指针转commiter id
git rev-parse 1b3e2f8d3
vscode远端分支刷新
git remote update origin --prune
git diff 中文路径乱码
人生苦短,直接用VScode自带的终端
git diff
diff --git "a/gitbook/\346\226\260\345\221\230\345\267\245\346\212\245\345\221\212\345\275\222\346\241\243/\344\271\260\345\277\227\346\226\214/SIP\345\215\217\350\256\256\347\232\204\345\237\272\346\234\254\346\246\202\345\277\265/README.md" "b/gitbook/\346\226\260\345\221\230\345\267\245\346\212\245\345\221\212\345\275\222\346\241\243/\344\271\260\345\277\227\346\226\214/SIP\345\215\217\350\256\256\347\232\204\345\237\272\346\234\254\346\246\202\345\277\265/README.md"
index 3e34879..1ff51d6 100644
...
git config --global core.quotepath false
这里会导致git status的路径出现问题(因为windows的路径采用的不是utf8编码),我按博客设置了还是不行
git clone遇到lfs错误
https://github.com/git-lfs/git-lfs/issues/911
Use git lfs logs last to view the log.
error: external filter 'git-lfs filter-process' failed
fatal: data/processed/career_builder/embedding.npy: smudge filter lfs failed
warning: Clone succeeded, but checkout failed.
解决方案
// Skip smudge - We'll download binary files later in a faster batch
git lfs install --skip-smudge
// Do git clone here
git clone ...
// Fetch all the binary files in the new clone
git lfs pull
// Reinstate smudge
git lfs install --force
特殊的符号
HEAD当前版本
HEAD^ HEAD~ ad921970^ 父节点
d921970^2 第二父节点(对于merge操作)
HEAD~2 爷爷节点
git钩子
.git.hooks下面自带一些例子
本质上就是出发动作的时候会调用该脚本
1,钩子类型
提交工作流钩子,
电子邮件工作流钩子,
其他钩子
2,提交工作流钩子
pre-commit钩子:
1,在键入提交信息前运行,检查即将提交的快照。
2,如果该钩子以非零值退出,git将放弃此次提交。不过可以用git commit --no-verify来提交.
3,这个钩子可以检查代码风格是否一致,尾随空白字符是否存在,或新方法的文档是否适当。
prepare-commit-msg钩子:
1,在启动提交信息编辑器之前,默认信息被创建之后运行。
2,允许编辑提交者所看到的编辑信息、
3,该钩子接收的写选项:存有当前提交信息的文件的路径,提交类型和修补提交的提交的SHA-1校验
4,适用于那些自动产生默认信息的提交,如提交信息模板,合并提交,压缩提交和修订提交等。
5,用来动态插入提交信息。
commit-msg钩子:
1,接收一个参数:存有当前提交信息的临时文件的路径。
2,如果该钩子脚本以非零值退出,Git将放弃提交。
3,用来在提交通过前验证项目状态或提交信息。
post-commit钩子:
1,在提交完成后运行,不接受任何参数。
2,该钩子一般用来通知之类的事情。
3,电子邮件工作流钩子
4,其他客户端钩子
pre-rebase钩子:
1,用于变基之前,以非零值退出可以终止变基的过程。
2,用于禁止对已经推送的提交变基。
post-rewrite钩子:
1,用于被那些会替换提交记录的命令调用。 --git commit --amend, git rebase
2,参数:触发重写的命令名。从标准输入中接受一系列重写的提交记录。
post-checkout钩子:
1,在git checkout成功运行后被调用。
2,用于调整工作目录,如放入大的二进制文件,自动生成文档或进行其他类似操作。
post-merge钩子:
1,在git merge成功运行后被调用。
2,用于恢复Git无法跟踪的工作区数据,比如权限数据。
3,用于验证某些在Git控制之外的文件是否存在。
pre-push钩子:
1,在git push运行期间,更新了远程引用但是尚未传送对象时被调用。
2,参数:远程分支的名字和位置。从标准输入中读取一系列更新的引用。
3,用于在推送开始之前,用它验证对引用的更新操作,(一个非零的退出码将终止推送过程)
pre-auto-gc钩子:
1,在垃圾回收之前被调用,用来提醒你现在要回收垃圾了,或者依情形判断是否要中断回收。
git钩子,给commit信息前加个前缀
很明显我们需要采用commit-msg钩子,它的参数${1}代表临时存放信息的文件
vim .git/hooks/commit-msg
msg=$(cat ${1})
echo mzb = ${msg} > "$1"
也可以统计有多少文件被修改啥的
考虑你工作了一半,需要切换到另外一个分支修改bug
git status 此时工作目录是脏的
git stash save/push
git stash show 可以看到被暂存
git status 此时工作目录是干净的
切到别的分支工作
切回来
git stash list
git stash apply stash@{1}
关于连接到github gitee等
首先需要本地生成邮箱的ssh密钥
教程
其中,ssh-keygen工具是包含在open-ssh工具包中的,需要apt-get
在~/.ssh/下放好公钥和密钥就行
在gitee中添加ssh公钥后
ssh -T git@gitee.com 测试一下,出现下面说明ok
Hi ZhibinMai! You've successfully authenticated, but GITEE.COM does not provide shell access.
然后
git remote 查看远端仓库
git remote rm 移除远端仓库
git remote add origin[远端名] git@gitee.com:qq3157347078/mzb_private_repositories.git
git push -u origin master 推送远端
推送远端时,如果出现:
[session-0b49e0af] Auth error: Access deined: authorize failure.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
...注意你的ssh地址是不是添加错了
git remote add origin[远端名] git@gitee.com:qq3157347078/mzb_private_repositories.git

...新手错误...
也可能会遇到系统不信任github的证书的问题:
mzb@mzb-virtual-machine:~/Project/CMakeTemplate$ git pull origin master
fatal: unable to access 'https://gitee.com/qq3157347078/mzb_private_repositories.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
mzb@mzb-virtual-machine:~/Project/CMakeTemplate$ git config --global http.sslverify false
安装
找教程,一路设置一路next就行了
git特殊符号
HEAD^ 前一个版本
HEAD^^ 前两个版本
HEAD~100 前一百个版本
git的雷
git log 的哈希可能会撞,概率很小
git push 在windows上新分支名称大小写不敏感,一个git的久远bug(windows本身对文件名大小写不敏感...)
如何添加忽略文件
教程
工程目录下添加
.gitignore
并编写即可
.gitignore 自身
/build 文件夹
!/build/input.txt
git登陆并和github关联
首先添加你的个人信息
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
然后生成ssh key
ssh-keygen -t rsa -C "your_email@youremail.com"
会默认在~/.ssh/id_rsa.pub中生成ssh公钥
把该公钥添加到gitee的公钥中,并测试是否能连接到gitee
ssh -T git@gitee.com
首先在托管仓库中获取地址如:git@gitee.com:qq3157347078/memory-leak.git
git commit -m "v1.0" 至少有一次commit,否则会出一些诡异的错
git remote -v
git remote rm origin
git remote add origin git@gitee.com:qq3157347078/memory-leak.git
git push -u origin master
git 命令
先理解git文件的三种状态

git init first_project
会生成一个 first_project文件夹,里面有一个隐藏.git版本库文件,dir /a:h可以查看
查信息的各种操作
git log --oneline 简单的查看版本信息
git reflog 查看历史命令,同时git show HEAD@{2}可以查看某次提交
git status 查看工作区状态
git diff 查看工作区和暂存区差异
git diff --cached 查看暂存区和仓库差异,
git diff HEAD 查看工作区和仓库的差异,
git ls-tree -r master --name-only 列出master下所有已经跟踪的文件
文件、仓库操作
git add 的反操作 git rm --cached test.cpp 将test.cpp撤销跟踪
git add的反向命令git checkout,撤销工作区修改,即把暂存区最新版本转移到工作区,
git reset --hard 44f994dd8fc1e10c9ed557824cae50d1586d0cb3 回退commit会丢掉文件
git reset --soft 回退commit不会丢掉文件
分支操作
git branch 新建分支,不切换分支
git checkout -b 新建分支,切换到新分支
git checkout 切换分支
git branch -d -d 删除远端分支
git branch -d/-D -D强制删除
git pull 从云端下载分支,并合并到当前分支
git fetch 下载分支但不合并
git rebase / git merge 都可以合并,合并机制不一样,有各自的风险,二者的合并效果一样,区别在于对合并的中间状态是删除还是不删除
git rev-parse master 查看master的分支hash
git checkout 052c0233bcaef35bbf6e6ebd43bfd6a648e3d93b /path/to/file 回滚某一个文件
git远端操作的一些雷
git clone只会clone master分支
git branch -a 查看所有分支
git checkout -b asan remotes/origin/personal/z00697375/asan 拉去远端分支
git diff asan remotes/origin/personal/z00697375/asan --stat 对比分支的差异
git push origin asan:personal/z00697375/asan git push
本文来自博客园,作者:XDU18清欢,转载请注明原文链接:https://www.cnblogs.com/XDU-mzb/p/15747390.html
浙公网安备 33010602011771号