# git - 常用命令
文档类,记录 git 常用命令
# git 基础概念
- 远程仓库:就是代码最终提交的归宿。
- 远端分支本地副本:主要储存了远程仓库各分支数据在本地的一个副本。可以打开项目下的 .git 文件,里面有个 refs/remotes,这里就主要存的就是远程仓库的分支信息,一般执行 push 或者 pull、fetch 都会往这里进行更新。
- 本地仓库:这里就是我们经常会打交道的区域,在执行 commit 之后,本质上就是提交到了这个区域。可以查看你的 .git 目录下的 refs/heads 目录,里面存的就是我们本地的分支代码信息。
- 暂存区:这个区域就是我们每次执行 git add 之后会存到的区域,用来与本地仓库之间做一个缓存,同时也是 Git 底层设计上来说也算是比较重要的一个区域,它能帮助 Git 在做 diff 的时候提高查找性能。
- 工作区:这个一般就是我们写代码的地方,比如 vscode 打开的项目,可以进行代码编辑的地方。
# 命令概述
git stash
git clone
git init
git remote
git branch
git checkout
git add
git commit
git rm
git push
git pull
git fetch
git merge
git log
git reset
git reflog
git revert
git cherry-pick
git tag
git 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,合并两个分支,相同的提交只保留一个,并且不会产生新的提交记录。