Skip to content

git 命令大全

各区域理解

各区域理解

  • 工作区(working directory):本地工作目录,进行代码书写和编辑的地方,例如 vscode 打开的工作目录

  • 暂存区(stage area,又称索引区 index):每次执行git add后会存储到该区域,用来与本地仓库之间做一个缓存

  • 本地仓库(local repository):当执行git commit命令后,会将暂存区内容提交到该仓库。工作区的.git 目录下的 refs/heads 目录,存储的就是本地分支的代码信息。这里可以使用git merge或git rebase将远程仓库副本合并到本地仓库

  • 远程仓库副本:存储在本地的远程仓库缓存。工作区的.git 目录下的 refs/remotes 目录,存储的就是远程仓库的分支信息。如需更新,通过git fetch或git pull实现,git fetch获取时,并未合并到本地仓库,需要通过git merge/rebase操作实现远程仓库副本和本地仓库的合并

  • 远程仓库(remote repository):代码提交最终的归宿,通过 pull/push 实现本地仓库与远程仓库的交互

git stash

用于想要保存当前的修改,又想回到之前最后一次提交的干净的工作仓库进行操作的情况。(执行该代码后,所有 commit 代码都会从暂存的工作区移除,回到上次 commit 时的状态)例如你在修改本地代码,突然另一个分支存在问题,可以先暂存,然后修改另一个分支,最后通过 git stash pop 恢复代码,继续搬砖

sh
## 暂时保存没有提交的工作
git stash save xxx  
## 列出所有暂时保存的工作
git stash list 
## 用于检查/校验
git stash show  
## {0}获取最新存储,{1}获取次新,{2.hour.ago}获取两小时之前的
git stash apply stash@{0}   
## 恢复最近一次 stash 文件
git stash pop   
## 丢弃最近一次 stash 文件
git stash drop   
## 丢弃某次 stash 文件
git stash drop stash@{1}   
## 删除所有 stash
git stash clear

命令解析

git --version

sh
## 查看版本
git --version

git config

sh
## 提交人姓名 配置提交人信息
 git config --global user.name 
 ## 提交人邮箱 配置提交人邮箱
 git config --global user.email 
 ## 查看 git 配置信息,或者查看 C:\Users\dell' 目录下的 .gitconfig 文件,并进行编辑保存
 git config --list

git clone

sh
## 仓库代码到本地,默认停留在 master 分支
git clone xxx.git clone 
## 仓库代码到本地,自动切换到 branch1 分支
git clone xxx.git -b branch1 clone

git init

sh
## 初始化 git 仓库,除了从远程仓库 clone 代码,我们也可以初始化一个 git 仓库,此时 init 的仓库无法和远程仓库进行交互
git init

git remote

sh
## 添加一个远程版本库关联
git remote add [alias] [url]  
## 删除某个远程版本库关联
git remote rm [alias]  
## 比如此时有个本地初始好的仓库,和一个创建好的远程仓库,两者进行关联
git remote add origin xxx.git   git push -u origin master

git branch

sh
## 查看本地所有分支信息
git branch 
## 查看远程仓库所有分支
git branch -r 
## 查看本地和远程仓库所有分支
git branch -a 
## 创建分支
git branch 分支名称 
## 切换分支
git checkout 分支名称 
## 以当前分支为基准,创建一个新的分支,并切换过去
git echeckout -b branch1 
## 合并分支
git merge 来源分支 
## 分支被合并后删除
git branch -d 分支名称   
## 分支没有被合并,想要强制删除
git branch -D 分支名称

git add

sh
## 添加一个或多个文件到暂存区
git add [file1] [file2]  
## 把当前目录所有改动的文件都添加到暂存区
git add .  
## 把当前仓库所有改动的文件都添加到暂存区
git add -A

git commit

sh
## 将暂存区的内容提交到本地 git 仓库中。
## 如果没有强制要求git add和git commit一定要分开,可以使用git commit -am提交,方便快捷

git commit [file1] ... -m [message]

git push

sh
## 推送到远程仓库
git push 
## 将本地刚建好的分支推送到远端并建立关联关系(如果远端存在相同分支:没有冲突,可以关联成功并提交你的改动;有冲突,提交命令报错,需要先 git pull(git pull origin branch1)同名分支代码,解决冲突,再提交)
git push --set-upstream origin branch1

git pull、git fetch

sh
## 从远程获取最新版本到本地,不会自动合并
git fetch 
## 从远程获取最新版本并 merge 到本地
git pull

git status

sh
## 查看当前文件状态
git status

git diff

sh

##查看尚未缓存的改动
git diff  
## 查看已缓存的改动
git diff --cached  
## 查看未缓存和已缓存的所有改动
git diff HEAD  
## 显示摘要而非整个 diff
git diff --stat

git rm

sh

## 如果某个需要被 git 忽略的文件不小心提交到了 git 本地仓库,需要从本地仓库中删除提交记录;如果只是简单的手动从本地工作目录中删除,执行git status时会报错
## 从 git 仓库中删除文件
git rm 文件名称  
## 如果删除之前修改过,并已经提交放入缓存区,使用-f 强制删除
git rm -f 文件名称  
## 把文件从缓存区删除,仍希望文件保存在工作目录
git rm --cached 文件名称  
## 从 git 仓库中删除某个目录,如果需要删除某个目录,添加上-r (递归删除,删除某个目录的所有子目录及文件)修饰就可以了
git rm -r dist

git mv

sh
## 用于移动或重命名一个文件、目录或软链接
git mv test.txt newtest.txt

git log

sh
## 查看提交历史
git log --oneline  
         --oneline,历史记录的简洁版本;
         --graph,查看历史记录中什么时候出现了分支,什么时候出现了合并;
         -reverse,逆向显示所有日志;
         --author,查找指定用户的提交日志;
         --since/--before/--until/--after 执行筛选日期;
         --no-merges,选项以隐藏
## 在使用 git log 查看日志找不到的情况下
git reflog

git reset、git revert

sh
## 取消之前git add提交的缓存内容(HEAD,当前版本; HEAD^,上一版本; HEAD^^,上上一版本;HEAD^^^,上上上一版本; HEAD~n,撤回 n 个版本)
git reset HEAD 
## 版本号 回退版本库。撤回后所有目录都放入缓存区(发现之前的提交有错误的代码,推荐使用--soft 命令处理)
git reset --soft
## 回退版本库、暂存区。撤回后所有目录都放入工作区 
git reset --mixed 版本号 
## 回退版本库、暂存区、工作区。撤回并清空工作目录及缓存区所有修改
git reset --hard 版本号
## 取消之前提交的 test.txt
git reset HEAD test.tx  
##  回滚到对应的 commit-id,删除该 commit-id 之后的所有提交,并不会产生新的提交记录,推送到远程服务器的话,需要使用-f 强制推送
git reset   
## 反做撤销 commit-id,重新生成一个新的 commit-id,并不会对之前的提交记录产生影响,推送到远程服务器直接使用 git push 即可
git revert

git cherry-pick

sh
## 在 master 分支上改了代码,并提交到本地仓库,使用该命令执行分支的指定提交合并到当前分支
git cherry-pick 忘记切换分支,

git tag

sh
## 轻量级标签
git tag v1.0.0 
## 注释标签
git tag -a v1.0.1 -m '发布的版本1.0.1'