文章目录
四个工作区域
工作目录(Working Directory): 没有放到版本控制中
暂存区(Stage/Index) : 用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
资源库(Repository或Git Directory) : 这里面有你提交到所有版本的数据(已提交)。其中HEAD指向最新放入仓库的版本
git仓库(Remote Directory) : 远程仓库,托管代码的服务器
工作区<–>暂存区
# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
git add .
#当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用(⚠️)
git rm file_path
#当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。
git rm --cached file_path
#直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
#加了【分支名】 +文件名 则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
git checkout
工作区、暂存区<–>资源库(版本库)
#将暂存区-->资源库(版本库)
git commit -m '该次提交说明'
#如果出现:将不必要的文件commit 或者 上次提交觉得是错的 或者 不想改变暂存区内容,只是想调整提交的信息
#移除不必要的添加到暂存区的文件
git reset HEAD 文件名
#去掉上一次的提交(会直接变成add之前状态)
git reset HEAD^
#去掉上一次的提交(变成add之后,commit之前状态)
git reset --soft HEAD^
log 查看提交记录
git log -数字 #表示查看最近几次的提交
git log -p -2 #显示最近两次提交的不同点
git log --author #查看具体某个作者的提交
git log --online #输出简要的信息
merge 合并分支
git merge [branch] #合并指定分支到当前分支
diff 解决冲突 制作补丁
git diff HEAD #比较当前工作区和上一次提交时文件的差异
git diff HEAD^ #比较上一次提交和上上次提交的文件差异
git diff 分支名 #查看当前分支跟指定的分支的差异
git diff 分支名1 分支名2 #查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别
git diff --name-only --diff-filter=U #查看冲突文件 这个太有用啦
reset 版本回退
git reset --hard HEAD^ #将 Git 回退到上一个版本 也就是上上次提交的时候,这样就可以撤销当次提交的信息
git reset --hard 4b2a0c8 #版本号(commit id)没必要写全,一般写前七位就够了,Git会自动去匹配。
git reset --hard HEAD^^
git reset --hard HEAD^^^
.gitignore 文件
*.log #表示忽略项目中所有以.log结尾的文件
123?.log #表示忽略项目中所有以123加任意字符的文件
/error.log #表示忽略项目中根目录中的error.log 这个文件
src/main/test/* #表示忽略/src/main/test/目录下的所有文件
**/java/ #匹配所有java目录下的所有文件
!/error.log #表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定
对于已经提交到远程或本地仓库的文件,.gitignore配置之后不会生效。我们必须先删除本地暂存区里的文件,之后在加上.gitignore 文件,最后再把变更提交到远程仓库上。
git rm --cached 文件名 #从暂存区删除某个文件
git rm -rf --cached 文件夹 #表示递归删除暂存区该文件夹的所有东西
案例
commit后,需要回到上一个版本,这个版本数据全部不要
(1)为保险起见,我们可以先切一个分支出来,保存当前版本,必然以后🈶️需要这个版本,又要重新开发
git checkout -b [branch]
(2)先本地代码回到上个版本
git reset --hard head^
(3) 提交本地代码到远程
如果你在直接add,commit后直接 git push。会报错。要用 git push -f
err: Updates were rejected because the tip of your current branch is behind
因为远程本地分支回滚后,版本将落后远程分支,所以你要先pull最新的,在push,这就很尴尬,因为最近一次提交的代码我都不想要了干嘛还要拉到本地
所以你只能强制提交 这是个非常危险的命令,因为它会把该版本之前commit的数据全部丢失
所以已经提交的远程的,尽量避免回退
本地提交后,想回退这一次的提交
#如果出现:将不必要的文件commit 或者 上次提交觉得是错的 或者 不想改变暂存区内容,只是想调整提交的信息
#移除不必要的添加到暂存区的文件
git reset HEAD 文件名
#去掉上一次的提交(会直接变成add之前状态)
git reset HEAD^
#去掉上一次的提交(变成add之后,commit之前状态)
git reset --soft HEAD^
参考
工作区、暂存区、版本库、远程仓库
一个小时学会Git
checkout、branch、log、diff、.gitignore