Git下载安装

下载:git官网下载

安装:按照提示安装即可

注意:安装后,如果使用ssh出现连接失败的问题,可以配置环境变量 GIT_SSH指定ssh的位置,参考

10.8 Git 内部原理 - 环境变量

文档:官方中文

Git基本环境配置

查看git设置

1
2
3
4
5
6
# 查看git配置
git config -l
git config --list

# 查看全局用户配置
git config --global -l

修改git配置设置

1
2
3
4
5
6
# 编辑Git配置文件
git config -e [--global]

# 设置提交的用户信息用户名
git config --global user.name "姓名"
git config --global user.email "邮箱地址"

其它git配置设置

1
2
3
4
# git可以将用户名,密码和仓库链接保存在硬盘中,而不用在每次push的时候都输入密码
git config credential.helper store
# 解决 Git 默认不区分文件名大小写的问题
git config core.ignorecase false

git命令

基本操作

新建仓库

1
2
3
4
5
6
7
8
9
10
11
# 在当前目录新建一个Git代码库
git init

# 新建一个目录,将其初始化为Git代码库
git init <project-name>

# 下载一个项目和它的整个代码历史
git clone <url>

# 只拉取最近一次提交记录,用于快速clone代码仓库
git clone --depth 1 <url>

提交代码

1
2
3
4
5
6
7
8
9
10
11
# 提交工作区所有修改到暂存区
git add .

# 提交暂存区修改到仓库区
git commit -m <message>

# 拉取远程仓库最新代码,并与本地分支合并,该命令相当于执行 git fetch && git merge
git pull <repo> <branch-name>

# 上传本地指定分支到远程仓库
git push <repo> <branch-name>

查看代码信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看工作区变更的文件
git status

# 查看提交日志
git log

# 查看提交记录(更简洁),该命令可以查看最近90天的git操作记录,关键时刻可以救命(比如,使用了 git reset --hard <commit-sha> 后找不到commit-sha后面的提交记录和代码了)
git reflog

# 查看工作区余暂存区修改文件具体差异
git diff

# 查看本地项目关联远程仓库地址
git remote -v

# 查看某个分支本地、origin、up远程仓库当前的commit-sha,可用于对比三者代码是不是最新的
git show-ref <branch-name> # 使用之前先执行 `git fetch --all` 拉取最新资源到本地

分支操作

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
# 查看所有分支
git branch -a

# 查看当前分支名称
git rev-parse --abbrev-ref HEAD # 低版本git获取当前分支名称
git branch --show-current # 高版本git获取当前分支名称

# 创建分支
git branch <branch-name>

# 切换分支, 将HEAD指向<branch-name>
git checkout <branch-name>

# 切换并关联到upstream上游仓库
git checkout --track <repo>/<branch-name> # git checkout --track up/Release_IEP-WEBSITE-3.40.0_92224

# 修改本地分支的关联仓库
git branch --set-upstream-to <repo>/<branch-name>

# 创建 + 切换分支
git checkout -b <branch-name>

# 两个分支来回切换,快捷方式
git checkout -

# 删除本地分支(已merge过分支)
git branch -d <branch-name>

# 删除本地分支(为merge的分支)
git branch -D <branch-name> # 相当于 --delete --force

# 删除远程仓库分支
git push -d <repo> <branch-name> # 或者 git push <repo> :<branch-name>

# 合并某本地分支到当前分支
git merge <branch-name>

# 合并某远程分支到当前分支 示例:git merge origin/dev
git merge <repo>/<branch-name>

# 直接使用pull合并某远程分支到当前分支
git pull <repo> <branch-name> # 等同于 git fetch <repo> && git merge <repo>/<branch-name>

撤销和回退操作

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
# 撤销本地所有修改(新创建的文件不会被撤销)
git checkout .

# 撤销本地新创建的文件(已存在文件的内容修改不会被撤销)
git clean -f

# 从暂存区回退到工作区
git reset HEAD filename # 指定文件

# 回退暂存区所有文件到工作区
git reset HEAD .

# 回退到某次提交
git reset <commit-sha> # 默认是 --mixed 回退的代码保留在工作区
git reset --mixed <commit-sha> # 回退的代码保留在工作区
git reset --soft <commit-sha> # 回退的代码保留在暂存区
git reset --hard <commit-sha> # 回退的代码不保留,该命令要谨慎操作

# 重置暂存区与工作区,与上一次commit保持一致
git reset --hard

# 回退到某次提交版本
git reset --hard <commit-sha>

# 查看分支当前版本commit SHA
git rev-parse HEAD

# 提交回退的版本 (注:强制提交后,当前版本后面的提交版本将会删掉!)
# git push -f
git push origin HEAD --force

# 新建一个commit,用来撤销指定commit
# git revert和git reset的区别:
# 前者只会创建一次新的提交(不会重置和更改原有的提交记录)而且只是撤销某一次提交
# 后者则会回退某一次提交记录之后的所有提交(会重置和更改历史提交记录,如果回退的提交已经pull到远程,回退以后push到远程必须使用强制推送 --force)
git revert <commit-sha>

# 拷贝应用某些已经存在的提交
git cherry-pick <commit-sha>

# 分支合并有冲突,选择中止分支合并操作
git merge --abort

# 中止变基操作
git rebase --abort

git储藏常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 储藏修改,将新的储藏推送到栈上,运行 git stash 或 git stash save
git stash
git stash save "save message"
# 从git栈中获取到最近一次stash进去的内容,恢复工作区的内容。获取之后,会删除栈中对应的stash
git stash pop
# 要查看储藏的东西,可以使用 git stash list
git stash list
# 将你刚刚储藏的工作重新应用:git stash apply。 如果想要应用其中一个更旧的储藏,可以通过名字指定它,像这样:git stash apply stash@{2}。 如果不指定一个储藏,Git 认为指定的是最近的储藏
git stash apply
# 根据版本号,恢复储藏信息
git stash apply stash@{1}
# 要移除它,你可以运行 git stash drop,加上你希望移除的储藏的名字
git stash drop stash@{0}
# 清空git储藏栈
git stash clear

git切换远程仓库地址

1
2
3
4
5
6
7
8
9
10
11
# 查看本地项目关联远程仓库地址
git remote -v

# 删除origin关联的远程仓库地址
git remote remove origin

# 重命名关联仓库名称
git remote rename <repo> <new-repo>

# 添加远程仓库新地址
git remote add origin <url>

git获取不到gitLab创建的新分支

1
2
3
4
5
6
7
8
9
10
11
# 将远程主机的最新内容拉到本地
git fetch

# 获取所有远程分支并清除远程仓库已删除的分支
git fetch --prune

# 查看对应分支的commit-sha
git show-ref <branch-name>

# 查看所有分支
git branch -a

fork模式切换新分支

1
2
3
4
5
6
7
8
9
10
11
12
13
# 获取远程私仓库(origin)和远程公仓库(up/upstream)代码、分支、tag等信息,该命令只是拉取,并未进行合并操作,所以不会又冲突(git pull命令等于git fetch && git merge)
git fetch --all

# 获取远程公仓的分支后就可以切换分支了
git checkout <branch-name>

# 推送本地代码到远程私仓之前,先拉取更新远程公仓的代码,看是否有冲突
git pull up/upstream <branch-name>

# 推送本地代码到远程私仓
git push origin <branch-name>

# 最后在gitlab发起merge request代码合并请求

修改提交信息

1
2
3
4
5
6
7
8
# 修改最新commit提交信息
git commit --amend

# 修改某次历史commit提交信息
git rebase -i father-commit-sha # 要修改历史提交信息的前一次commit-sha

# 修改第一个commit的提交信息
git rebase -i --root

解决 Git 默认不区分文件名大小写的问题

1
git config core.ignorecase false

git清理不必要的文件和优化本地仓库内存

1
git gc

git导出某个时间段的代码提交记录到桌面

1
2
3
4
5
6
7
8
9
10
11
# 在项目根目录,执行以下命令
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

# 输出最近一年的格式化的git提交记录
git log --pretty=format:"%ad - %an: %s" --after="2018-01-31" --until="2019-01-31" --author="liaolongdong"

# 导出txt文档
git log --pretty=format:"%ad - %an: %s" --after="2018-01-31" --until="2019-01-31" --author="liaolongdong" >> ~/Desktop/commit.txt

# 导出excel
git log --date=iso --pretty=format:'"%h" "%an" "%ad" "%s"' --after="2018-01-31" --until="2021-03-31" --author="liaolongdong" >> ~/Desktop/commit.csv