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 config credential.helper store
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清理不必要的文件和优化本地仓库内存
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
|