Git 概览

# 通用

# git 大文件存储

# changelog 生成

Commit message 和 Change log 编写指南 (opens new window)

# 国内访问github

域名https://github.com/ 换成 https://hub.fastgit.org/
1

参考资料 (opens new window)

# git 短命令

vim ~/.gitconfig
[alias] 
        co = checkout
        ps = push
        pl = pull
        mer = merge --no-ff
        cp = cherry-pick

1
2
3
4
5
6
7
8

# 命令简写

完整 简写
git commit -m git cm
git commit -am git acm

# 实用指令

# git diff 查看文件差异

查看不同分支同一文件的差异

git diff branch1..branch2 pnpm-lock.yaml
1

# git stash 暂存 [2]

# 保存当前未commit的代码
git stash

# 保存当前未commit的代码并添加备注
git stash save "备注的内容"

# 列出stash的所有记录
git stash list

# 删除stash的所有记录
git stash clear

# 应用最近一次的stash
git stash apply

# 应用最近一次的stash,随后删除该记录
git stash pop

# 删除最近的一次stash
git stash drop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

pop、drop、apply指定stash记录

$ git stash list

stash@{0}: WIP on ...
stash@{1}: WIP on ..

$ git stash apply stash@{0}
1
2
3
4
5
6

# git reset 回退

# 回退代码,不保留之后的内容
git reset --hard <commit id>
# 回退,保留代码到编辑区
git reset --sort <commit id>
1
2
3
4

# revert 还原

将现有的提交还原,恢复提交的内容,并生成一条还原记录。

git revert <commit id>
# 还原合并提交
git revert -m 1 <commitHash>
1
2
3

# 查看对应指令帮助

<指令> -help;
# 示例
git branch -help

1
2
3
4
tldr <指令>
# 示例
tldr git grep

1
2
3
4

# 新建并切换分支

git checkout -b + 分
1

# 远程仓库设置(可以设置本地路径)

git remote add origin ../remote
1

# 查找出错的commit

参考资料: https://www.ruanyifeng.com/blog/2018/12/git-bisect.html

git bisect二分查找

#先检查下提交历史
git log --pretty=oneline
# 启动查错
git bisect start [终点] [起点]
# 没问题标记
git bisect good
# 有问题标记
git bisect bad
# 重复这两个过程,最后git给出如下提示
b47892 is the first bad commit
# 退出查错 
git bisect reset
1
2
3
4
5
6
7
8
9
10
11
12

# 查看push到远程仓库的时间

git reflog show origin/V1.0.15_dev --pretty='format:%C(red)%h%Creset %C(cyan)%gd%Creset %C(green)%gs%Creset: %s' --date=iso
1

# 在git仓库查找字符串(包括历史记录中)

示例

# 查找关键词search_string,并输出行号
$ git grep -n search_string
# 在历史查找
$ git grep search_string HEAD~2
# 在所有的分支中查找
git grep search_string $(git rev-list --all)
1
2
3
4
5
6

# 删除文件

# 删除未跟踪的文件
$ git clean
# 交互式删除
$ git clean -i
# 显示将要被删除的文件,但是不是直接删
$ git clean --dry-run
# 强制删除未跟踪的文件
$ git clean -f
# 强制删除未跟踪的目录
$ git clean -fd
1
2
3
4
5
6
7
8
9
10

# 踩坑记录

# git push失败,远端意外挂断了

git push -u origin main 报错

压缩对象中: 100% (18914/18914), 完成.
错误:RPC 失败。HTTP 500 curl 22 The requested URL returned error: 500
send-pack: unexpected disconnect while reading sideband packet
写入对象中: 100% (23792/23792), 93.60 MiB | 3.61 MiB/s, 完成.
总共 23792(差异 4821),复用 21112(差异 3501),包复用 0(来自  0 个包)
致命错误:远端意外挂断了
Everything up-to-date
1
2
3
4
5
6
7

有时候推送较大数据时,缓冲区设置默认值太小可能会导致这个问题。尝试增大 Git 的 HTTP post 缓冲区:

git config --global http.postBuffer 524288000
1

这将 HTTP post 缓冲区设置为 500MB。

# warning: redirecting to https://code....

重定向


# 参考 https://blog.csdn.net/qq_39397845/article/details/112003403

// 移除所有origin
git remote remove origin

// 重新设置origin
git remote add origin git@github.com:Nehic/demo.git

// pull一下看还会不会提示warning: redirecting to XXX
git pull
1
2
3
4
5
6
7
8
9
10
11

# git 拉不下代码

https://blog.csdn.net/qq_30376375/article/details/116504157

.git/config 文件

[remote "origin"]
	url = xxx.com/xxx.git
  # fetch = +refs/heads/master:refs/remotes/origin/master 改成 ↓
	fetch = +refs/heads/*:refs/remotes/origin/*
1
2
3
4

# 修改commit信息,如填错邮件地址

参考资料:https://segmentfault.com/a/1190000041122415

# 查看commit id
git log 
# 重新设置基准线
git rebase -i <最早commit> 
# 修改commit
git commit --amend --author="Author Name <email@address.com>" 
# 移动到下个commit作为基准线
git rebase --continue 
1
2
3
4
5
6
7
8

revert 合并提交后,再次合并分支会失效,需要revert上次revert

# 误操作后的恢复

git reflog
# 或者
git log -g
git branch <分支> commitId // 用对应日志建立新分支
1
2
3
4

# 为什么要学习命令

  1. 可复用,如要工程化要写脚本,图形化工具做不到
  2. 一次学习,所有平台收益,ide可能换,终端会一直存在
  3. 如果想要利用git操作的结果,需要熟悉指令,如查看本地有多少分支git branch | wc -l

适合用可视化工具的情况

  1. merge冲突时,可视化工具更方便对比、选择
  2. diff 很长代码

# 相关链接

[1] 官方手册 (opens new window) [2] 实用指令 (opens new window)