Git 常用命令
Posted lisztomania
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git 常用命令相关的知识,希望对你有一定的参考价值。
Git使用(对廖雪峰老师Git教程的总结,同时推荐一个博客的教程,诙谐有趣)
Git配置
全局配置
主目录下的.gitconfig
# 设置名称信息
git config --global user.name <"Name">
# 设置邮箱信息
git config --global user.email <"Email">
# 显示颜色
git config --global color.ui true
# 设置命令别名
git config --global alias.<别名> <命令名>
局部配置
当前库的.git目录下的config,配置命令不加global就是局部配置。
忽略文件
当前库的.gitignore文件
规则:
<filename>
*.<后缀>
创建版本库
# 创建文件夹
mkdir name
cd name
# 创建为git仓库,自动创建master分支
git init
提交文件流程
提交流程
# 添加要提交的文件(可添加多个),将文件修改添加至暂存区
git add filename
# 提交文件,将暂存区内容提交到当前分支
git commit -m "注释说明信息"
# 上传至远程仓库
git push -u origin(远程仓库名) master(分支名)
恢复
老版
恢复分两种情况:
- 文件修改后未添加至暂存区
此时恢复,相当于从仓库中还原最新的提交至本地(且仓库和本地文件一致,本地新建的不行),丢弃修改。
- 文件修改后添加至暂存区
此时恢复,相当于将添加到暂存区中的内容还原至本地
git checkout -- <filename>
新版
- 从暂存区恢复至工作区
git restore --worktree <filename>
- 从仓库恢复至暂存区
git restore --staged <filename>
- 从仓库同时恢复至暂存区和工作区
git restore --source=HEAD --staged --worktree <filename>
检查流程
# 检查仓库当前的状态(查看是否有我们不知道的变更)
git status
# 比较工作区与暂存区的区别(如未指定文件名,则比较所有)
git diff <filename>
# 比较暂存区与仓库的区别(如未指定文件名,则比较所有)
git diff --cached <filename>
# 比较工作区与仓库的区别(如未指定文件名,则比较所有)
git diff HEAD <filename>
日志系统
# 查看提交历史记录(第一个为当前状态,不指定参数则显示详细信息)
git log [--pretty=oneline]
# 查看命令历史记录
git reflog
回溯版本
# 回溯上一个版本(参数HEAD^中^代表往上数第一个版本,^^为往上数第二个版本,如欲回溯的版本过前,可用HEAD~100,即往上数第一百个版本)
git reset --hard <HEAD^>
# 也可以指定回溯版本的commit号(在日志中可以查看,往上查看提交历史记录,往下查看命令历史记录)
git reset --hard <commit id>
删除文件
# 本地删除
rm <filename>
# git删除
git rm <filename>
# 提交删除操作
git commit -m <"remove filename">
恢复文件
文件删除后想要找回,可以从上一个提交版本中恢复文件。
git restore --source=<commit_id> --staged --worktree <filename>
远程库SSH秘钥
# 如用户主目录不存在.ssh目录,则需生成秘钥
ssh-keygen -t rsa -C <"keys">
# 进入.ssh,将公钥复制至远程仓库添加秘钥处
cd ~
cd .ssh
# id_rsa:私钥
# id_rsa.pub:公钥
远程库
关联远程库
第一种方式:关联
# 本地没有仓库
mkdir 仓库名
cd 仓库名
git init
git remote add <远程库名> git@<网络地址>:<账号名>/<仓库名>.git (注:远程库名,为本地使用,可以更改)
git pull
git branch -a
git checko <分支名>
# 本地已有仓库
cd 仓库名
git remote add <远程库名> git@<网络地址>:<账号名>/<仓库名>.git (注:远程库名,为本地使用,可以更改)
get pull
git branch -a
git checko <分支名>
第二种方式:克隆
git clone git@<网络地址>:<账号名>/<仓库名>.git
删除已有远程库
# 删除远程库
git remote rm <远程库名>
分支
# 查看所有分支
git branch -a
# 创建分支
git branch <分支名>
# 切换已有分支
git checkout <分支名>
# 创建并切换分支
git checkout -b <分支名>
# 合并目标分支到当前分支 启用Fast forward模式(删除分支后,丢失分支信息)
git merge <分支名>
# 合并目标分支到当前分支 禁用Fast forward模式(删除分支后,保留分支信息)
git merge --no-ff -m <"描述"> <分支名>
# 查看分支合并图
git log --graph
# 删除分支
git branch -d <分支名>
# 强制删除还未合并的分支(不建议使用)
git branch -D <分支名>
# 删除远程分支
git push <远程库名> :<分支名>
新版切换分支
# 创建并切换分支
git switch -c <分支名>
# 切换已有分支
git switch <分支名>
整理分支变基 (尽量不使用,影响他人使用)
git rebase
BUG修复流程
# 当a分支有正在进行的任务时
# 暂存当前工作区
git stash
# 切换至BUG分支b
git checkout b
# 创建并切换处理BUG分支b-01
git checkout -b b-01
# 处理完BUG后 切换至BUG分支b
git switch b
# 合并处理BUG分支,并保留分支信息
git merge --no-ff -m "描述" b-01
# 切换至正进行任务的分支
git switch a
# 查看暂存工作区
git stash list
# 回复工作区(方式一),保留stash内容
git stash apply
# 回复工作区(方式二),移除stash内容
git stash pop
# 可恢复指定stash,0为序号
git stash apply stash@{0}
如当前分支a是从b分支出来的,需要将a中的BUG也一并修复
# 在a分支中修复BUG commit id为在b-01中commit所产生commit id
git cherry-pick <commit id>
多人协作
远程库操作
# 查看远程库信息
git remote
# 查看详细信息(fetch:抓取权限,push:推送权限)
git remote -v
# 创建远程分支至本地(先在远程库创建分支,然后抓取至本地),分支名需一致
git checkout -b <分支名> <远程库名>/<远程分支名>
推送操作
# 推送本地分支至远程库对应分支
git push <远程库名> <本地分支名>
抓取失败
# 错误信息:no tracking information(本地分支未链接远程分支)
# 设置链接
git branch --set-upstream-to = <远程库名>/<远程分支名> <分支名>
情景一:其他人对分支推送了,你推送的与其冲突
# 首先抓取合并最新提交
git pull
# 解决冲突后,重新推送
标签管理
# 创建当前分支的标签
git tag <tagname>
# 创建特定commit id 标签
git tag <tagname> <commit id>
# 创建当前分支带描述的标签
git tag -a <tagname> -m <"text">
# 创建特定commit id带描述的标签
git tag -a <tagname> -m <"text"> <commit id>
# 删除标签
git tag -d <tagname>
# 查看标签信息
git show <tagname>
# 向远程库推送标签
git push <远程库名> <tagname>
# 向远程库推送所有标签
git push <远程库名> --tags
# 删除远程库标签
git push <远程库名> :refs/tags/<tagname>
总结
- 从Git服务器/平台创建仓库后,关联/克隆至本地
- 从主分支master创建一个分支a,切换至a
- 如需要开发某功能时,从分支a创建a-功能名,切换至a-功能名
- 在a-功能名,完成开发后,切换至a,合并分支a-功能名,视情况决定是否删除a-功能名
- 当a的第一个版本开发完时,在a创建Release-版本id,切换至Release-版本id
- 在Release-版本id,完成版本号修改及其他工作,分别与a、master合并,并在master打上tag(标签),视情况决定是否删除Release-版本id
- 如已发布版本出现紧急BUG,切换至master/tagname,创建hotfix-版本id,切换至hotfix-版本id
- 在hotfix-版本id,完成BUG修复后,分别与a、master合并,视情况决定是否删除hotfix-版本id
以上是关于Git 常用命令的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段