导航
1.Git的分区(工作区,暂存区,版本库)
2.Git分支
3.版本的回滚(revert,reset)
4.代码暂存(stash)
1.Git的分区(工作区,暂存区,版本库)
- 工作区,也叫Working Directory
- 暂存区,也叫stage,index
- 版本库,也叫本地仓库,commit History
工作区
工作区应该不陌生,就是我们能看见,直接编辑的区域。对于一些新增的文件,如果没有被add到暂存区,就会以红色的形式放置在工作区。
暂存区
数据暂时存放的区域,对于add git版本控制的文件,就算是进入暂存区啦。可以理解为数据进入本地代码仓库之前存放的区域。由于还没对本地仓库生效,所以是数据暂时存放的区域。
对暂存区的文件修改后,会以蓝色的形式显示。如果第一次创建并add到暂存区的文件,由于远程仓库没有同步,所以会显示绿色。
注:存放在 ".git目录下" 下的index文件(.git/index)中
版本库
在暂存区commit的代码会被放入版本库中。可以理解为一个本地的代码仓库,push的时候,才会把版本库的数据全都发送到远程仓库中。
分区转换指令
git add数据从工作区转移至暂存区 git commit数据从暂存区转移至版本库,也就是本地仓库
git push数据从版本库中发送到远程仓库
分区对比指令
git diff 工作区与暂存区对比
git diff head 工作区与版本库对比
git diff --cached 暂存区与版本库对比
2.Git分支
git branch 创建其他分支
gitcheckout 切换到其他分支
分支的合并
merge 和 rebase 两种方式:都是从一个分支获取并合并到当前分支
merge:自动创建一个新的commit,如果遇到冲突,仅需要修改后重新commit
rebase: 找公共的节点,直接合并之前commit历史
git rebase --abort:遇到冲突时放弃合并,回到rebase操作之前的状态
git rebase --continue:合并冲突,结合"git add 文件"命令一起,一步一步地解决冲突
git rebase --skip:将引起冲突的commits丢弃掉
分支的冲突
冲突是从合并的时候产生的。git分支的合并,其实就是tree和tree的合并
3.版本的回滚(revert,reset)
git revert后,将回退到上一个commit的版本
git reset分为三种模式:
soft
mixed
hard
由于每一次的commit都会产生与之对应的hash值,所以借助这个进行重置就轻松多了
git reset --hard commit的hash值
会重置暂存区和工作区,完全重置为指定的commit节点。当前分支没有commit的代码必然会被清除
git reset --soft commit的hash值
会保留工作目录,并把指定的commit节点与当前分支的差异都存入暂存区。也就是说,没有被commit的代码也能够保留下来
git reset commit的hash值
不带参数,也就是mixed模式。将会保留工作目录,并且把工作区,暂存区以及与reset的差异都放到工作区,然后清空暂存区。因此执行后,只要有所差异,文件都会变成红色,变得难以区分
4.代码暂存(stash)
git stash 暂存修改过的代码,保存在Git栈中,然后将工作区还原成上一次commit的内容
git stash list 显示之前压栈的所有记录
git stash clear 清空Git栈
git stash apply 从Git栈中读取上一次暂存的那些代码,恢复工作区
参考文章:
https://zhuanlan.zhihu.com/p/98679880
https://www.cnblogs.com/best/p/7474442.html#_lab2_0_0
网友评论