Git Memo
Git Memo
作者: ol
⚠著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

初始化设置
git config --global user.name "你的用户名":配置用户名git config --global user.email "你的邮箱":配置邮箱git config --global credential.helper store:存储凭证git config --list:查看所有配置(包括全局、本地和系统级)
创建仓库
-
git init <project-name>:创建一个新的本地仓库(省略 project-name 则在当前目录创建) -
git clone <url>:克隆一个远程仓库
四个区域
-
工作区 (Working Directory):就是你在电脑里能实际看到的目录
-
暂存区 (Stage/Index):暂存区也叫索引,用来临时存放未提交的内容,一般在.git 目录下的 index 中
-
本地仓库 (Repository):Git 在本地的版本库,仓库信息存储在.git 这个隐藏目录中
-
远程仓库 (Remote Repository):托管在远程服务器上的仓库,常用的有 GitHub、GitLab、Gitee
添加和提交
-
git add <file>:添加一个文件到暂存区,比如git add .就表示添加所有文件到暂存区 -
git commit -m "message":提交所有暂存区的文件到本地仓库 -
git commit -am "message":提交所有已修改的文件到本地仓库
文件操作
-
git mv <file> <new-file>:移动一个文件到新的位置 -
git rm <file>:从工作区和暂存区删除一个文件,并且将这次删除放入暂存区 -
git rm --cached <file>:从索引 / 暂存区中删除文件,但是本地工作区文件还在,只是不希望这个文件被版本控制 -
git checkout <file> <commit-id>:恢复一个文件到之前的版本 -
git restore --staged <file>:撤销暂存区的文件,重新放回工作区(git add 的反向操作)
查看状态或差异
-
git status:查看仓库状态,列出还未提交的新的或修改的文件 -
git log --oneline:查看提交历史,–oneline 表示简介模式 -
git diff:查看未暂存的文件更新了哪些部分 -
git diff <commit-id> <commit-id>:查看两个提交之间的差异 -
git reflog:Reference Log(引用日志),查看本地仓库中所有分支引用(包括 HEAD)的移动历史
撤销和恢复
-
git reset --mixed <commit-id>:重置当前分支的 HEAD 为之前的某个提交,–mixed 参数表示重置工作区 -
git reset --hard <commit-id>:重置当前分支的 HEAD 为之前的某个提交,–hard 参数表示重置工作区和暂存区 -
git reset --soft <commit-id>:重置当前分支的 HEAD 为之前的某个提交,–soft 参数表示重置暂存区 -
git revert <commit-id>:创建一个新的提交,用来撤销指定的提交,后者的所有变化将被前者抵消,并且应用到当前分支

分支
-
git branch:查看所有本地分支,当前分支前面会有一个星号 *,-r 查看远程分支,-a 查看所有分支 -
git branch <branch-name>:创建一个新的分支 -
git checkout <branch-name>:切换到指定分支,并更新工作区(旧版本,有歧义,不推荐) -
git switch <branch-name>:切换到指定分支,并更新工作区(新版本,无歧义,推荐) -
git checkout -b <branch-name>:创建并切换到新的分支(旧版本,有歧义,不推荐) -
git switch -b <branch-name>:创建并切换到新的分支(新版本,无歧义,推荐) -
git merge --no-ff -m "message" <branch-name>:合并分支,–no-ff 参数表示禁用 Fast Forward 模式,合并后的历史有分支,能看出曾经做过合并;-ff 参数表示使用 FastForward 模式,合并后的历史会变成一条直线 -
git branch -d <branch-name>:删除一个已经合并的分支 -
git branch -D <branch-name>:删除一个分支,不管是否合并 -
git switch <dev>:切换到 dev 分支 -
git rebase <main>:rebase 操作可以把本地未 push 的分叉提交历史整理成直线,看起来更加直观。但是,如果多人协作时,不要对已经推送到远程的分支执行 rebase 操作。rebase 不会产生新的提交,而是把当前分支的每一个提交都 “复制” 到目标分支上,然后再把当前分支指向目标分支,而 merge 会产生一个新的提交,这个提交有两个分支的所有修改 -
git squash <branch-name>:合并 & 挤压(squash)所有提交到一个提交 -
git log --graph --oneline --decorate --all:简洁直观的方式展示仓库的提交历史和分支关系参数含义:
--graph:在输出中添加 ASCII 图形,可视化展示分支之间的合并历史和关系(用竖线、斜线等表示分支走向)。--oneline:将每个提交压缩为一行显示,只包含提交哈希值的前 7 位和提交信息摘要,非常简洁。--decorate:显示提交所关联的引用(如分支名、标签名、远程分支等),直观看到每个提交属于哪个分支。--all:显示所有分支的提交历史,而不仅仅是当前分支的历史,便于查看多分支并行开发的情况。
觉得太长可以取一个别名graph,下次直接输入graph就可以调用了。
命令:alias graph="git log --graph --oneline --decorate --all"
远程仓库
-
git remote add <remote-name> <remote-url>:添加远程仓库 -
git remote -v:查看远程仓库 -
git remote rename <old-name> <new-name>:重命名远程仓库 -
git remote rm <remote-name>:删除远程仓库 -
git pull <remote-name> <branch-name>:从远程仓库拉取代码,默认拉取远程仓库名 origin 的 master 或者 main 分支 -
git pull --rebase:将本地改动的代码 rebase 到远程仓库的最新代码上(为了有一个干净、线性的提交历史) -
git push <remote-name> <branch-name>:推送代码到远程仓库(然后再发起 pull request) -
git push -u <remote> <local-branch>:<remote-branch>:推送本地分支到远程分支并关联跟踪关系 -
git fetch <remote-name>:获取所有远程分支 -
git branch -r:查看远程分支 -
git fetch <remote-name> <branch-name>:Fetch 某一个特定的远程分支
Stash
-
git stash save "message":Stash 操作可以把当前工作现场 “储藏” 起来,等以后恢复现场后继续工作。-u 参数表示把所有未跟踪的文件也一并存储;-a 参数表示把所有未跟踪的文件和忽略的文件也一并存储;save 参数表示存储的信息,可以不写 -
git stash list:查看所有 stash -
git stash pop:恢复最近一次 stash,pop 会把 stash 内容删除 -
git stash pop stash@{2}:恢复指定的 stash,stash@{2} 表示第三个 stash,stash@{0} 表示最近的 stash -
git stash apply:重新接受最近一次 stash,apply 不会把 stash 内容删除 -
git stash drop stash@{2}:删除指定的 stash -
git stash clear:删除所有 stash
标签
git tag <tag-name>:给当前的提交打上标签,通常用于版本发布
特殊文件
-
.git:Git 仓库的元数据和对象数据库 -
.gitignore:忽略文件,不需要提交到仓库的文件 -
.gitattributes:指向当前分支的指针 -
.gitkeep:使空目录被提交到仓库 -
.gitmodules:记录子模块的信息 -
.gitconfig:记录仓库的配置信息
特殊符号
-
main/master:默认主分支 -
origin:默认远程仓库 -
HEAD:指向当前分支的指针 -
HEAD^:上一个版本 -
HEAD~4:上四个版本
代理
git config --global --unset http.proxy:取消HTTP代理git config --global --unset https.proxy:取消HTTPS代理git config --global http.proxy http://127.0.0.1:33210:设置HTTP代理git config --global https.proxy https://127.0.0.1:33210:设置HTTPS代理
更新
git update-git-for-windows:更新windows版本
.gitignore文件
- 匹配规则

- 示例

- 各种.gitignore文件模板(github/gitignore: A collection of useful .gitignore templates)
SSH秘钥
-
首先到用户的根目录的.ssh文件夹下
- Windows:
C:\Users\用户名\.ssh
- Windows:
-
生成ssh秘钥
ssh-keygen -t rsa -b 4096参数含义:
-t参数(密钥类型)
-t是type的缩写,用于指定要生成的 SSH 密钥的加密算法类型 。这里rsa表示使用 RSA(Rivest-Shamir-Adleman)算法,它是一种非对称加密算法,在 SSH 密钥体系里是比较经典、应用广泛的一种,不过也有更现代的如ed25519等算法(若用ed25519算法,命令可写成ssh-keygen -t ed25519,在很多场景下它性能和安全性表现更优 )。-b参数(密钥长度)
-b是bits的缩写,用于指定密钥的长度(位数)。4096表示生成 4096 位长度的 RSA 密钥 。密钥长度越长,理论上破解难度越大、安全性越高,但同时生成和使用时的计算开销也会稍大。RSA 密钥常见的还有 2048 位(若不指定-b,RSA 密钥默认长度一般是 3072 位左右,不同版本ssh-keygen可能有差异 ),4096 位在当下能提供较高的安全级别,很多场景会推荐使用。执行这条命令后,通常会提示你指定密钥文件的保存路径(默认是
~/.ssh/id_rsa及对应公钥id_rsa.pub),还可设置密钥的密码(passphrase,按需选择,设置后使用密钥时需额外输入该密码,增强安全性) 。生成的私钥(id_rsa这类文件)要妥善保管,公钥(id_rsa.pub这类)可配置到 GitHub、GitLab 等平台用于身份认证 。 -
默认会是id_rsa名字,如果不是第一次需要输入一次文件名,输入空会覆盖之前的id_rsa文件而且不可逆

-
id_rsa是私钥文件,id_rsa.pub是公钥文件,私钥文件不要上传不要给任何人,公钥文件上传到代码托管平台(如github)上
-
在github的设置中,把公钥文件的内容复制到ssh的Key里面。

- 创建一个config文件,把下面的内容放进去
1 | # github |
VScode的Git状态

GitFlow
GitFlow 是一种流程模型,用于在 Git 上管理软件开发项目。
-
主分支 (master/main):代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的
-
开发分支 (develop):用于日常开发。所有的功能分支、发布分支和修补分支都应该从开发分支派生出来
-
功能分支 (feature):用于开发单独的功能或者特性。每个功能分支都应该从开发分支派生,并在开发完成后合并回开发分支
-
发布分支 (release):用于准备项目发布。发布分支应该从开发分支派生,并在准备好发布版本后合并回主分支和开发分支
-
热修复分支 (hotfix):用于修复主分支上的紧急问题。热修复分支应该从主分支派生,并在修复完成后,合并回主分支和开发分支
版本号规则

分支命名规范
