Git的最佳实践

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 克隆项目
git clone https://github.com/majinhui04/sharegood-utils [本地文件夹]
# 获取远程仓库的新分支以及删除远程仓库已删除的分支
git fetch -p
# 查看本地所有的分支
git branch
# 查看所有远程的分支
git branch -r
# → 查看所有远程分支和本地分支
git branch -a
# → 删除本地branchname分
git branch -d <branchname>
# → 创建新的分支并切换到该分支
git checkout -b <branchname>
# → 删除远程branchname分支
git push origin -d <branchname>
# 添加到暂存区去(提交当前目录或者它后代目录下相应文件)
$ git add .
# → 提交文件 -m 后面的是注释
git commit -m 'feat: 新增了readme.md'
# → 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash
# → 恢复工作现场(恢复隐藏的文件,同时删除stash列表中对应的内容)
git stash pop
# → 在本地(当前)分支上合并远程分支
git merge origin/master
# → 将本地master分支推送到远程origin主机的master分支
git push origin master
# → 查看package.json文件的commit记录
git log package.json
# → 精简模式查看提交的历史记录(只显示哈希值和提交说明) q 退出
git log --pretty=oneline
# → 回滚到指定版本,同时清空工作目录的所有改动
git reset --hard HEAD
# → 删除在远程已被删除的本地分支 (慎用)
git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
# → 删除了那些远程仓库不存在的分支 === git fetch -p
git remote prune origin
# → 查看和编辑git的配置
git config --list
# → 忽略冲突,强制提交(慎用👎)
git push origin <brancename> -f
# → 列出所有<code>tag</code>
git tag
# → 创建带有信息的
git tag -a 'v1.0.0' -m 'first version'

git中‘~’和‘^’的区别

1
2
3
4
5
(<commit>|HEAD)^n,指的是HEAD的第n个父提交,可以通过在“^”后面跟上一个数字,表示第几个父提交,“^”相当“^1”。例如:HEAD^2 表示HEAD的第二次父提交。(<commit>|HEAD)~n,指的是HEAD的第n个祖先提交,可以通过在“~”后面跟上一个数字,表示第几个祖父提交,“~”相当“~1”,“~n”相当于连续的<n>个“^”。例如:HEAD~2 表示HEAD的第一个父提交的第一个父提交。

等式1:HEAD~ === HEAD^ === HEAD^1

等式2:HEAD~2 === HEAD^^ === HEAD^1^1

配置

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
查看
格式:git config [--local|--global|--system] -l

$ git config --local -l # → 查看仓库级的config
$ git config --global -l # → 查看全局级的config

编辑
格式:git config [--local|--global|--system] -e

$ git config --local -e # → 编辑仓库级的config
$ git config --global -e # → 编辑全局级的config

修改
格式:git config [--local|--global|--system] section.key value

$ git config --local push.default 'simple' # → 修改仓库级的push.default的默认行为
$ git config --global push.default 'current' # → 修改全局级的push.default的默认行为

* 关于git default配置这里
增加

格式: git config [--local|--global|--system] --add section.key value(默认是添加在local配置中)

$ git config --add cat.name songhw # → local配置写入 cat.name = songhw
$ git config --local --add cat.name songhw # → 等同于上一步
$ git config --global --add cat.name lhammer # → global配置写入 cat.name = lhammer

获取
格式:git config [--local|--global|--system] --get section.key(默认是获取local配置中内容)

$ git config --get cat.name # → 输出songhw
$ git config --local --get cat.name # → 输出结果同上一步
$ git config --global --get cat.name # → 输出lhammer

删除
格式:git config [--local|--global|--system] --unset section.key

$ git config --local --unset cat.name # → 删除local配置中的cat.name = songhw
$ git config --global --unset cat.name # → 删除local配置中的cat.name = lhammer