信息配置

# 查看全部配置信息
git config --list
# 查看仓库配置信息
git config --local --list
# 查看系统信息配置
git config --system --list
# 查看用户信息配置
git config --global --list
# 退出
q


# 查看某个配置信息
git config user.name
# 用户级别-信息配置(配置用户名)
git config --global user.name "hu1hu"
# 用户级别-删除配置信息
git config --global --unset user.name

注意事项:

  • 以linux系统为例,系统信息全部用户通用,用户信息用户内通用(如root用户),仓库信息作用于一个仓库内。
  • 若出现多条相同的配置信息,采用最后一条,采用范围最小的一条。
  • git配置是键值对的形式,同一级别同一个配置信息会覆盖原有的信息。
  • 查看信息时,如果没有指定级别,则从local->global->system 向上找直到找到或没有
  • 删除信息时,如果没有指定级别,则从local->global->system 向上找直到找到或没有,删除一条后即结束

必要的配置

# 一般使用用户级别配置
# 配置用户名与用户邮箱
git config --global user.name "hu1hu"
git config --global user.email "3261801992@qq.com"
# 配置文件区分大小写
git config --global core.ignore false
  • 用户名和邮箱记得配置成自己的,由于git会将每个提交(commit)与一个特定的作者关联起来,每次提交都会携带这些个人信息。

个人喜好配置

# 用户级别配置
# 日志格式别名(使用 git lg 展示日志)
# log: 表示运行git log命令。
# --color: 启用彩色输出,使日志信息更易读。
# --graph: 在日志输出中显示分支图形,以便清楚地看到分支的合并和分支关系。
# --pretty=format:'...': 定义日志输出的格式。%Cred、%Creset、%C(yellow)、%Cgreen、%C(bold blue)和%Creset是用于设置输出文本颜色的占位符,%h表# 示简短的提交哈希值,%d表示分支信息,%s表示提交消息,%cr表示相对提交时间,%an表示作者名字。
# --abbrev-commit: 使用缩写的提交哈希值,以便在日志信息中显示更简洁的提交标识。
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

代理配置

# 对所用域名配置代理
# 格式: git config --global http.proxy <protocol>://<host>:<port>
# 1、配置http代理,支持http/https 请求
git config --global http.proxy http://127.0.0.1:7890
# 2、配置https代理,支持https 请求,(要在代理服务器上配置SSL/TLS证书)
git config --global http.proxy https://127.0.0.1:7890
# 配置sockets5代理,通用型代理(会话层代理)
git config --global http.proxy sockets5://127.0.0.1:7890

# 指定域名设置代理
# 格式:git config --global http.<url>.proxy <protocol>://<host>:<port>
# 配置http代理,支持http/https 请求
git config --global http.https://github.com.proxy http://127.0.0.1:7890

# 推荐使用指定域名的sockets5代理,可以配置多个
git config --global http.https://github.com.proxy sockets5://127.0.0.1:7890
git config --global http.https://gitlab.com.proxy sockets5://127.0.0.1:7890

私有仓库克隆

当我们需要克隆私有仓库时就需要执行登录操作,为了避免每次都需要输入用户(用户是邮箱)密码,我们可以进行相应的配置。

SSH秘钥

将电脑中的公钥配置到github或gitee所需平台中

使用凭据帮助器

第一次需要输入账号密码,以后会记住,默认开启使用系统自带的凭证管理器。虽然有进行加密,但是可能造成密码泄露。

git config --global credential.helper store

Git - 凭证存储 (git-scm.com)

使用Personal Access Token(访问令牌)

等等

仓库初始化

初始化本地仓库

# 进入本地仓库的文件夹中
git init
  • 该命令会创建一个名为.git的子目录,这个子目录中包含初始化Git仓库的所用必须的文件。但是这时项目中的文件还没有被跟踪,仅仅做了初始化操作。

克隆已有仓库

git clone <url> [仓库本地要使用名字]
# 仓库名默认与远程一致

基础操作

命令 功能 workspace staging local repository remote repository
git add 将工作区的文件放入暂存区,如果文件没有跟踪则跟踪
git commit -m “注释” 将暂存区的文件夹提交到本地仓库 ↓版本更新
git commit -am “注释” 将暂存区的文件追加到本地仓库
git reset –soft <> 本地仓库分支回退 ↑版本回退
git reset –mixed <> 本地仓库分支回退,并恢复到暂存区(默认) ↑版本回退
git reset –hard <> 本地仓库分支回退,并恢复到暂存区与工作区 ↑版本回退
git restore 将暂存区的文件恢复到工作区
git restore –staged 将HEAD指向版本恢复到暂存区
git rm 删除工作区、暂存区的文件 delete delete
git rm –cached 删除暂存区的文件 delete
git fetch <远程主机名> <远程分支>:<本地分支> 将远程仓库拉取到本地仓库
git pull <远程主机名> <远程分支>:<本地分支>
git push <远程主机名> <远程分支>:<本地分支>
  • git restore –staged :默认从HEAD恢复,也可使用参数–source= 指定版本。
  • git commit –amend -m “···”: 追加提交
  • git revert <回退点>
  • <远程分支>:<本地分支>:远程分支和本地分支同名可以省略
  • git pull 就是 git fetchgit merge 的缩写!

查看文件状态

# 可以查看仓库内的文件状态与一些建议,当不知道怎么办的时候可以使用
git status

文件状态:

  • Untracked:未跟踪,没有交给git仓库管理
  • Unmodified:已跟踪,未修改(工作区与暂存区一致,与本地仓库一致)
  • Modified:已跟踪,已修改(工作区与暂存区不一致)
  • Staged:已跟踪,已缓存(工作区与暂存区一致,与本地仓库不一致)

查看历史提交记录

命令行

# 原生
git log
# 使用自定义,上面信息配置起了别名
git lg

图形化git自带

gitk
# 解决中文乱码
git config --global gui.encoding utf-8

修改最后一次的提交

# 1.使用编辑器编辑上次提交信息
git commit --amend
# 2.上次的提交信息被覆盖
git commit --amend -m "test":

git 远程仓库操作

查看远程仓库

git remote
# 使用-v,显示远程仓库简称与url
git remote -v

添加远程仓库

git remote add <shortname> <url>

删除远程仓库

git remote remove <shortname>
# git remote rm <shortname>

重命名远程仓库

git remote rename <old> <new>

修改指定远程仓库的URL

git remote set-url <remote_name> <new_url>

其它

# 当远程分支没有时会自动创建
git push origin <分支名>

自动补全

按两下tab键,当你只记住一部分操作的时候,这个操作有神奇的作用。

分支管理

查看分支

git branch

# 查看本地分支与远程分支绑定情况
git branch -vv

# 建立当前分支的upstream
git branch -u [repository-name/branch-name]
# 取消分支的 upstream
git branch --unset-upstream [branch-name]

新建本地分支

# 创建分支
git branch <新分支名>
# 创建并切换分支
git checkout -b <新分支名>

删除本地分支

git branch -d <分支名>

切换分支

# checkout是移动HEAD
git checkout <分支名>
# 新版切换分支命令
git switch <分支名>

分支合并

git merge <分支名>
# 将分支合并到当前分支

# 当有冲突时我们要处理冲突
# 1.手动处理
# 2.git add .
# 3.git commit
# 合并后把原来的分支删除

# 将此分支append到<branch>上
git rebase <branch>

强制移动分支

git branch -f <branch—name> <新位置>

暂存工作区与暂存区

# 查看存储列表
git stash list
# 缓存工作区与暂存区
git stash
# 缓存工作区与暂存区并带有附加信息
git stash save "信息"
# 恢复并删除存储列表第一个
git stash pop
# 使用指定id的缓存
git stash apply <stash_id>
# 指定id删除
git stash drop <stash_id>
# 全部删除
git stash clear

高级操作

# 整理提交记录
# cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD上(只要不是 HEAD 上游的提交就没问题)。
git cherry-pick <记录号> <记录号> ....

# 交互式变基
git rebase -i <记录号>

打标签

git tag <标签名> <提交号>

Git 工作流

一文读懂Git工作流 - 知乎 (zhihu.com)

参考

Git - Book (git-scm.com)

学习 Git 分支 — Learn Git Branching

关于版本控制 · Pro Git 第二版 简体中文 (gitbooks.io)

Git中的push和pull的默认行为 - 掘金 (juejin.cn)