Git 常用 #
本篇主要介绍 Git 的常用命令,包括 Git 的基本配置、创建仓库、添加文件、提交文件、查看状态、查看提交历史、撤销修改、删除文件、分支管理、远程仓库等。
Git 基本配置 #
配置 SSH 密钥 #
提交代码到远程仓库时,需要使用 SSH 密钥进行身份验证,因此需要先配置 SSH 密钥。
# 生成 SSH 密钥
ssh-keygen -t rsa -C [email protected]
# 查看 SSH 密钥,复制到 GitHub/GitLab 等 SSH Keys 中
cat ~/.ssh/id_rsa.pub
添加 .ssh/config 文件,配置 SSH 密钥的别名,方便管理多个 SSH 密钥。
vim ~/.ssh/config
以 GitHub 为例,配置如下:
# GitHub
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa
配置用户名和邮箱 #
提交代码时,需要配置用户名和邮箱。
git config --global user.name "poneding"
git config --global user.email [email protected]
# 只配置当前仓库的用户名和邮箱
git config user.name "poneding"
git config user.email [email protected]
配置别名 #
通过配置别名,可以简化 Git 命令的输入,例如,将 git status
简化为 git st
获取 Git 仓库的状态。
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ck checkout
配置默认分支 #
最新版本的 Git 默认分支为 main
,如果需要修改为 master
,可以通过如下命令进行修改。
git config --global init.defaultBranch master
配置 rabase #
当你运行 git pull
时,Git 会从远程仓库拉取最新的更改并将它们合并到你的本地分支。如果设置了 pull.rebase
为 true
,Git 会在拉取远程更改后,不使用普通的 merge 操作,而是使用 rebase 将你本地的提交放在远程更改的后面。这样可以有效避免分支合并时产生大量的无用的 merge commit,有助于保持一个更线性、整洁的提交历史。
git config --global pull.rebase true
Git 仓库 #
初始化仓库 #
# 在当前目录初始化仓库
git init
# 初始化并指定初始化分支
git init -b dev
# 在指定目录创建仓库
git init mydir
克隆远程仓库 #
# SSH 方式
git clone [email protected]/poneding/archives.git
# HTTPS 方式
git clone https://github.com/kubernetes/kubernetes.git
提交本地更改到远程仓库 #
# 拉取远程仓库的最新更改
git pull
# 添加所有更改到暂存区
git add .
# 提交更改
git commit -m "this commit"
# 推送到远程仓库
git push
# 首次推送到远程仓库
git push -u origin master
# 推送所有本地分支到远程仓库
git push --all
# 推送所有标签到远程仓库
git push --tags
添加远程仓库 #
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin [email protected]/poneding/archives.git
# 修改远程仓库地址
git remote set-url origin [email protected]/poneding/archives-new.git
# 删除远程仓库
git remote rm origin
暂存更改 #
添加文件 #
# 将更改添加到暂存区
git stash
# 查看暂存区的更改
git stash list
# 取出暂存区的更改
git stash pop
提交修正 #
- 多次提交的内容其实可以合并成一次提交,这样可以保持提交历史的整洁。
- 想要修改提交的信息,例如提交信息描述不准确、拼写错误等。
# 修改最近一次提交的信息
git commit --amend -m "new commit message"
提交规范 #
规范化的 commit 提交有一些约定俗称的格式,下面快速枚举一些常见格式:
# 功能类
git commit -m "feat: xxx"
# 修复类
git commit -m "fix: xxx"
# 杂事
git commit -m "chore: xxx"
撤销更改 #
还未 git add #
这里其实涉及到了两种更改:
- 文件新增:使用
git clean -f
撤销更改 - 文件修改/删除:使用
git restore .
(新版,推荐)或git checkout .
(旧版) 撤销更改
git clean -f && git restore .
已经 git add,还未 git commit #
# 取消所有暂存的更改
git reset
git reset .
git reset HEAD .
# 撤销单个文件的暂存更改
git reset HEAD README.md
已经 git commit #
# 获取最近一次提交的 commit_id
git log
# 撤销最近一次提交
git reset [commit_id]
Git 分支 #
查看分支 #
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看所有分支
git branch -a
创建分支 #
# 创建新分支
git branch dev
# 创建并切换到新分支
git checkout -b dev
# 创建孤立分支,新分支没有任何提交历史,但会保留之前分支的所有文件
git checkout --orphan dev
同步远程分支 #
远程分支分两种:
- 本地远程分支,可以通过
git branch -r
查看到; - 远程仓库分支,可能是其他人创建的,可以通过
git fetch
同步到本地远程分支。
# 远程仓库有了新的分支,将远程分支同步到本地
git fetch
# 将远程分支同步到本地
git checkout -b dev origin/dev
合并分支 #
# 将当前分支 dev 的更改合并到 master 分支
git checkout master
git merge dev
git push
删除分支 #
# 删除本地分支
git branch -d dev
# 删除远程分支
git push origin -d dev
场景:远程仓库已经删除了分支,本地仓库还存在该分支,需要删除本地分支。
# 1. 查看远程分支和本地分支的对应关系:
git remote show origin
# 2. 删除远程已经删除过的分支:
git remote prune origin
Git 标签 #
查看标签 #
git tag
创建标签 #
# 创建标签(轻量标签,只是某个提交的引用)
git tag v1.0.0
# 创建标签(附注标签)
git tag -a v1.0.0 -m "release v1.0.0"
# 推送标签到远程仓库
git push origin v1.0.0
删除标签 #
# 删除本地标签
git tag -d v1.0.0
# 删除远程标签
git push origin :refs/tags/v1.0.0
# 本地批量删除标签
git tag | xargs git tag -d
# 本地删除 v1.1.0 开头的标签
git tag | grep "v1.1.0.\d$" | xargs git tag -d
# 批量删除远程标签
git show-ref --tag | awk '/(.*)(\s+)(.*)$/ {print ":" $2}' | xargs git push origin
Git Remote #
查看远程信息 #
git remote -v
git remote show
新增远程 #
git remote add origin [email protected]:poneding/demo.git
更新远程地址 #
git remote set-url origin [email protected]:poneding/demo.git
删除远程 #
git remote remove origin
多远程 #
git remote add origin [email protected]:poneding/demo.git
git remote add origin2 [email protected]:poneding/demo.git
git push origin master
git push origin2 master
# 所有分支、tag 等
# git push --all origin # 所有分支
git push --mirror origin
# git push --all origin2 # 所有分支
git push --mirror origin2
注意,后续提交到远程时:
# 默认提交到 origin 远程
git push
# 提交到 origin2 远程
git pull origin2 master
git push origin2 master
Git 信息 #
提交哈希值 #
# 完整的提交哈希值
git rev-parse HEAD
# 简短的提交哈希值 (7 位)
git rev-parse --short HEAD
删除远程仓库提交历史 #
rm -rf .git
git init
git add .
git commit -m "first commit"
git remote add origin [email protected]/poneding/archives.git
# 强制推送到远程仓库,覆盖远程仓库的提交历史
git push -u --force origin master
排错 #
Q1:Permissions 0664 for ‘~/.ssh/id_rsa’ are too open #
ssh 私钥文件权限过高,需要修改为 600。
chmod 600 ~/.ssh/id_rsa
Q1:证书颁发者未被识别 #
问题描述:Peer’s Certificate issuer is not recognized.
解决方法:
# 仓库级别,在仓库目录下执行
git config http."sslVerify" false
# 全局级别
git config --global http."sslVerify" false