Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:
Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
四个区域常用命令
1、新建代码库
# 在当前目录新建一个Git代码库
git init
# 新建一个目录,将其初始化为Git代码库
git init [project-name]
# 下载一个项目和它的整个代码历史
git clone [url]
2、查看文件状态
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
3、工作区<–>暂存区
# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
git add .
# 当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用(⚠️)
git rm file_path
# 当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有
git rm --cached file_path
# 直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
# 加了【分支名】 +文件名 则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
git checkout
4、工作区<–>资源库(版本库)
#将暂存区-->资源库(版本库)
git commit -m '该次提交说明'
#如果出现:将不必要的文件commit 或者 上次提交觉得是错的 或者 不想改变暂存区内容,只是想调整提交的信息
#移除不必要的添加到暂存区的文件
git reset HEAD 文件名
#去掉上一次的提交(会直接变成add之前状态)
git reset HEAD^
#去掉上一次的提交(变成add之后,commit之前状态)
git reset --soft HEAD^
5、远程操作
# 取回远程仓库的变化,并与本地分支合并
git pull
# 上传本地指定分支到远程仓库
git push
6、其它常用命令
# 显示当前的Git配置
git config --list
git config -l
# 过滤系统配置
git config --system --list
# 过滤全局配置
git config --global --list
# 编辑Git配置文件
git config -e [--global]
#初次commit之前,需要配置用户邮箱及用户名,使用以下命令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
#调出Git的帮助文档
git --help
#查看某个具体命令的帮助文档
git +命令 --help
#查看git的版本
git --version
# 显示从最近到最远的提交日志
git log
git log --pretty=oneline
# 查看命令历史
git reflog
分支
git分支常用命令
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
git switch -c [branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
$ git switch [branch-name]
# 切换到上一个分支
$ git checkout -
# 合并指定分支到当前分支
git merge [branch]
# 强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
# 存储当前分支
git stash
git 本地项目与远程地址建立连接
建立好远程仓库与本地项目地址后
在本地项目文件夹内初始化git
git init
复制远程项目路径地址,后执行:
git remote add origin 远程仓库地址
连接建立了,将本地提交至缓存区
git add .
缓存后,再提交至本地git本地仓库
git commit -m '当前提交的相关描述'
最后推送至远程仓库
git push -u origin master
或者强制推送
git push -u origin master -f
问题解决
在 git 执行命令git push origin master时,报错error: failed to push some refs to ‘https://gitee.com/根本原因是远程仓库和本地仓库内容不同,将远程仓库中不同的内容pull到本地,就好了。比如,我是新建了一个远程仓库,准备把本地内容上传时,忘记把远程仓库的redme.md文件同步出错的。解决方法:git pull --rebase origin master将redme.md文件同步到本地,然后再次执行git push origin master就好了