# git - 常用命令
文档类,记录 git 常用命令
# git 基础概念
- 远程仓库:就是代码最终提交的归宿。
- 远端分支本地副本:主要储存了远程仓库各分支数据在本地的一个副本。可以打开项目下的 .git 文件,里面有个 refs/remotes,这里就主要存的就是远程仓库的分支信息,一般执行 push 或者 pull、fetch 都会往这里进行更新。
- 本地仓库:这里就是我们经常会打交道的区域,在执行 commit 之后,本质上就是提交到了这个区域。可以查看你的 .git 目录下的 refs/heads 目录,里面存的就是我们本地的分支代码信息。
- 暂存区:这个区域就是我们每次执行 git add 之后会存到的区域,用来与本地仓库之间做一个缓存,同时也是 Git 底层设计上来说也算是比较重要的一个区域,它能帮助 Git 在做 diff 的时候提高查找性能。
- 工作区:这个一般就是我们写代码的地方,比如 vscode 打开的项目,可以进行代码编辑的地方。
# 命令概述
git stashgit clonegit initgit remotegit branchgit checkoutgit addgit commitgit rmgit pushgit pullgit fetchgit mergegit loggit resetgit refloggit revertgit cherry-pickgit taggit rebase
# git stash
把暂存区的改动临时存储起来。
git stash save 'xxx':储存变更,并命名 xxxgit stash list:查看储存区所有提交列表git stash pop:弹出并应用最近的一次储存区的代码提交git stash drop stash@{n}:删除某次储存记录,n 可以通过git reflog查看git stash clear:清除所有 stash 信息
它的数据将被存在仓库 .git 文件下的 refs/stash 里。
# git clone
git clone xxx.git:把一个仓库代码拉到本地git clone xxx.git -b branch1:把一个仓库代码拉到本地之后,基于默认分支(main/master)创建新的分支
# git init
git init:初始化一个 git 仓库,创建 git 配置到 .git 文件夹
# git remote
git remote add <name> <url>: 添加一个远程版本库关联git remote rm <name>: 删除某个远程版本库关联
# git branch
git branch:查看本地所有分支信息git branch -r:查看远程仓库所有分支git branch -a:查看本地和远程仓库所有分支
# git checkout
git checkout -b branch1:基于当前分支创建并切换到新分支
# git add
添加工作区的文件到暂存区
git add [file1] [file2]: 添加一个或多个文件到暂存区git add .:把当前目录下得所有文件改动都添加到暂存区git add -A:把当前仓库内所有文件改动都添加到暂存区
# git commit
将暂存区文件提交到本地仓库
git commit [file1] ... -m [message]:将暂存区的内容提交到本地 git 版本仓库中git commit -am [message]: 相当于git add -A加git commit -m [message]
# git rm
git rm .env:将 .env 文件从 git 仓库中删除git rm -r dist:将 dist 文件夹从 git 仓库中删除
如果已经 git add 到暂存区了,那就需要 (use --cached to keep the file, or -f to force removal)
# git push
推送本地分支到远程仓库
git push:推送当前分支到远程仓库对应分支git push --set-upstream origin branch1:推送当前分支到远程仓库 branch1 分支,并关联,下次可以直接使用git push
# git pull
合并远程分支到本地分支
git pull:合并远程仓库对应分支到当前本地分支git pull origin branch1:合并远程仓库 branch1 分支到当前本地分支
# git fetch
获取远程仓库分支的最新代码,并不合并到本地仓库
git fetch:更新远程仓库分支,可以查看到远程分支最新的改动git fetch:更新的时候,如果远程分支已经删了,那本地记录这边也删除对应的远程分支
# git merge
git merge master:合并 master 分支到当前分支git merge origin/master:合并远程 master 分支到当前分支
# git log
查看提交记录
# git reset
回退版本
git reset [--soft | --mixed | --hard] [HEAD]
# 关于 HEAD
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- HEAD~n 回撤 n 个版本,这种也是更加方便的
# 参数
基于 git reset HEAD^ 进行说明。
--soft:重置最新一次提交版本,不会修改暂存区和工作区。--mixed:默认参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。--hard:重置所有提交到上一个版本,并且修改工作区,会彻底回到上一个提交版本,在代码中看不到当前提交的代码,也就是工作区改动也被干掉了。
栗子:
- 我改动了我的 README 文件,在我们的工作区就产生了一次改动,但是这个时候还没有提交到暂存区,在 status 里会显示为工作区修改的标记
- 接着我们执行 git add,这个时候你查看暂存区,会发现这次改动被提交进去了,同时被 status 标记为已被提交至暂存区
- 然后再执行 git commit,这个时候就完成了一次提交
接下来我们想撤回这次提交,以上三种参数所体现的表现会是这样的:
- --soft:我们对 README 的更改状态现在变成已被提交至暂存区,也就是上面 2 的步骤。
- --mixed: 我们对 README 的更改变成还未被提交至暂存区,也就是上面 1 的步骤。
- --hard:我们对 README 的所有更改全没了,git log 中也找不到我们对 README 刚刚那次修改的痕迹。

# git reflog
查看所有 git 操作记录,包括提交,回退等等
# git revert
回退某次 commit 提交的内容,和 reset 的区别是会产生新的 commit
# git cherry-pick
将指定提交合并到当前分支
git cherry-pick master commitId1 commitId2 commitId4将 master 上的提交 1,2,4 合并到当前分支
# git tag
打标签
# 轻量标签
git tag v1.0.0
# 附注标签
git tag -a v1.0.1 -m "发布正式版 1.0.1"
附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。
git push origin tagName:推送标签git tag:查看标签git tag -l v1.0.1:筛选标签git tag -d v1.0.1:删除标签git push origin --delete v1.0.2:删除远程标签git push origin :refs/tags/v1.0.1:删除远程标签,将“:”前面空值替换到远程
# git rebase
类比 merge,合并两个分支,相同的提交只保留一个,并且不会产生新的提交记录。