配置

配置当前项目

1
2
git config user.name '你的名字'
git config user.email '你的邮箱'

修改全局配置

1
2
git --global config user.name '你的名字'
git --global config user.email '你的邮箱'

检查配置

1
2
3
4
# 打印所有config
git config --list
# 打印指定config
git config user.name

仓库

初始化仓库

1
git init

image-20201029094138532

添加工作区文件到暂存区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 添加单个文件
git add 1.txt

# 添加多个文件
git add 2.txt 3.txt

# 添加整个目录
git add ./a

# 添加多个目录
git add ./b ./c

# 添加所有文件
git add .

创建版本

1
git commit -m 'xxx'

以上命令会直接添加本次提交的备注,一般用于改动不大的情况。

1
git commit

以上命令会调用出默认的编辑器去编辑信息。

修改默认的编辑器

以vacode为例(Windows)。首先在命令行输入code,如果能正常出现vscode编辑器,那么直接输入以下命令即可。

1
git config core.editor notepad

如果不能出现vscode编辑器,那么将VSCode目录下的bin目录添加到环境变量,然后运行上面的命令即可。

MAC及Linux环境下配置。

1
2
3
4
5
6
7
8
9
# 添加 vscode 编辑器 - mac
# 通过 vim 打开环境变量配置文件
vim ~/.bash_profile
# 添加环境变量
export PATH=/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin:$PATH
# 保存退出
source ~/.bash_profile
# 测试:在终端中直接通过命令 code 调用 vscode
git config --global core.editor "code --wait"

查看状态

1
git status

提交日志

1
2
3
4
// 完整格式
git log
// 简要格式(单行)
git log --oneline

image-20201029095951370

image-20201029095957852

乱码

git status 显示乱码

1
git config --global core.quotepath false

终端乱码

菜单 -> 设置 -> 文本 -> 本地 / 编码

或修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
[gui]  
encoding = utf-8
# 代码库统一使用utf-8
[i18n]
commitencoding = utf-8
# log编码
[svn]
pathnameencoding = utf-8
# 支持中文路径
[core]
quotepath = false
# status引用路径不再是八进制(反过来说就是允许显示中文了)

修复提交

修复(替换上一次)提交,在不增加一个新的提交版本的情况下将新修改的代码追加到前一次的提交中

1
git commit --amend -m 提交

删除

1
2
3
4
5
6
# 从 git 仓库与工作区中删除指定文件
git rm 文件

# 只删除 git 仓库中的文件
git rm --cached 文件

rm 以后,需要 commit 这次操作,否则 rm 将保留在暂存区git commit -m 修正

撤销重置

从暂存区中撤销到工作区

1
2
3
4
// 从暂存区中撤销一个指定文件
git reset HEAD 文件名称
// 从暂存区中撤销所有文件
git reset HEAD .

该命令既可以用于回退版本

1
2
# 回退到指定的 commitID 版本
git reset --hard commitID

比较

1
2
3
4
5
6
7
8
# 比较 工作区和暂存区
git diff 文件
# 比较 暂存区和仓库
git diff --cached [commitId] 文件
# 比较 工作区和仓库
git diff commitId filename
# 比较 仓库不同版本
git diff commitId1 commitId2

分支

我们的开发就像是游戏的任务,默认是在主线(master)上进行开发的。许多时候,还有各种支线任务,git 支持我们创建分支来进行项目开发

查看分支

1
git branch

创建分支

1
git branch 分支名称

切换分支

1
2
3
git checkout 分支名称
# 也可以使用 checkout -b 来新建分支
git checkout -b 分支名称

分支合并

1
2
3
4
5
6
7
# B 合并到 A,需要切换到 A 分支
git merge 被合并分支

# 查看已经合并的分支
git branch --merged
# 查看未合并的分支
git branch --no-merged

image-20201029104640818

例如将pay分支的内容合并到master分支,那么先切换到master分支,然后运行git merge pay命令。

删除分支

1
2
3
4
# 如果分支为未合并状态,则不允许删除
git branch -d 分支名称
# 强制删除
git branch -D 分支名称

合并记录

1
2
# 合并 HEAD 前两个祖先记录
git rebase -i HEAD~2

~^,前者表示纵向,后者表示横向。

1566209448773

rebase 操作

1
2
3
4
5
6
7
# p, pick = use commit => 使用
# r, reword = use commit, but edit the commit message => 使用,但重新编辑说明
# e, edit = use commit, but stop for amending => 使用
# s, squash = use commit, but meld into previous commit => 使用,但合并上一次
# f, fixup = like "squash", but discard this commit's log message => 就像 squash 那样,但会抛弃这个 Commit 的 Commit message
# x, exec = run command (the rest of the line) using shell => 执行脚本
# d, drop = remove commit => 移除
1
2
3
git rebase -i HEAD~3
# 弹出编辑器,根据需要的进行修改,然后保存
# 如果为 r,s 则会再次弹出编辑器,修改新的 commit message,修改之后保存

如果出现一些问题,可以通过 git rebase --edit-todogit rebase --continue 进行重新编辑保存

关于合并记录的更多实例:https://blog.antmoe.com/posts/5fe7c05a/index.html#commit

合并冲突

有的时候,不同的分支可能会对同一个文件内容和位置上进行操作,这样在合并的过程中就会产生冲突

  • 查看冲突文件
  • 修复冲突内容
  • 提交

标签

有的时候,我们希望给某一个特定的历史提交打上一些标签

新建 tag

1
git tag -a v1.0.0 HEAD/commitId

查看 tag

1
git tag

远程仓库

生成密钥

1
ssh-keygen -t rsa -C "i@xiaokang.me"

生成的密钥默认在用户目录的.ssh文件下。

添加远程仓库

1
git remote add 仓库别名 仓库地址

提交(同步远程)

1
2
3
git push -u origin master
# -u 简化后续操作
git push origin master

远程分支

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
# 提交到远程(分支)
git push origin [本地分支名称]:[远程分支名称]

# 远程先创建好分支然后拉取到本地
git checkout -b [本地分支名称] origin/[远程分支名称]

# 拉取远程分支到本地
git pull origin [远程分支名称]:[本地分支名称]

# 查看远程仓库
git remote show origin

# 查看本地分支
git branch

# 查看远程分支
git branch -r

# 查看所有分支
git branch -a

# 删除本地分支
git branch -d [本地分支名称]

# 删除远程分支
git push origin --delete [远程分支名称]
# or
git push origin :[远程分支名称]

# 设置默认提交分支
git branch --set-upstream-to=origin/[远程分支名称] [本地分支名称]

扩展:工作流 - git work flow

img