Android学习之路(六)—— Git系列
*这里不是git的指令大全。
1. Git仓库数据结构
Git仓库是由一个个提交组成,也就是我们的commit
- commit:一次改动的提交,每一次commit只记录了相比上一次提交的改动部分。
- b4eb0a7642cc1719b1e3582cef932eefe237a91f:代表的是这次提交的哈希值,可以指代这次提交,每个哈希值不一样可以只取一部分代替这一次提交,如b4eb0a。
- HEAD->master :可以看成一条分支的引用、指针。HEAD是一个特殊的引用,HEAD代表你现在操作的位置,可以指向其中的某一个提交,也可以是某一个分支引用的引用。master一般是主分支,这种一般指向一个分支最新的操作的提交。
2. add与commit操作
staging area:在Git中是为将改动的内容汇集以待提交,也就是图片中的Changes not staged for commit
add指令:暂时使内容加入暂存区,也就是:Changes to be committed:
3. clone命令
clone流程为:
- 会先把远程仓库中的所以分支引用取下来,也就是branch,然后把所以branch指向的commit取下来。
- 然后把从最开始的commit到master指向的commit都提取出来,然后会把仓库的branch指引与HEAD的指引指向clone下来的仓库镜像,也就是如前面看到的origin/master,这是镜像指引,在本地操作本地仓库事不会修改镜像的位置,只有与远程仓库合并时才会修改与远程仓库对应本地新的指引位置。
4. Git深之Feature Branching
- 当需要添加新功能或者修改bug时,需要新建一个Branch来写
- 写完一个Branch后,合并到master,然后删除掉一个新的Branch
这里圆圈代表每一个commit,方框为每一次的引用
- 当需要增加,修改时,就需要新建一个branch,如feature1。
- 创建一个分支,git branch feature1
- git checkout feature1 切换到新的分支上,后面的提交也就在feature1延升
- 当在feature1分支上上传了commit
- 然后可以往主分支master,去合并
- 使用merge,把feature1合并到master上
- 每一次commit一但提交就不会也不能被改变
- git合并时有两种情况。1.feature1合并到master时,master没有新的提交,就会直接快速移动到feature1最新的提交,如master在3时,直接移动到5位置。2.当master上有新的提交,就会创建一个新的提交来合并两个提交,并把分支移动到新创建的地方。如图中6为master上的新commit,4、5为feature1的提交,合并时就会创建一个7来合并。
在merge时会出现冲突,处理冲突方式
文件中会有提示冲突部分,直接进入文件查看修改,然后重新提交,也有工具。
放弃解决冲突 git merge - -abort,就会回到merge前的状态。
4. git reflog
git reflog branch:查看指定的引⽤(HEAD 或 branch)的移动历史,从⽽找到之前的某个特定 commit
其实可以在git仓库文件中examples.git\logs\refs\中查看到每次提交操作。上面有这次commit对应的上一次hash值,这次的hash值,何人提交提交内容。
常用操作
- git init:初始创建git仓库
- git add:将文件修改部分添加进暂存区
git add -i :交互式添加
当需要某一部分修改添加进仓库时可以使用,防止一次性添加过多无法区分。
5. rebase
把当前 commit(以及它之前的 commits)应⽤到指定的需要 rebase 的 commit 上。
但是每一个commit一但提交确定就无法修改,所以就会新创建需要挪动的commit,如下面红色的commit;
rebase也会出现冲突,与merge冲突一样操作。
1. reset
- git reset 指定commit 移动到指定 commit,并保留 working tree 的内容
- git reset --hard 指定commit 移动到指定 commit,并重置 working tree
- reset与checkout一样都是移动HEAD,但是reset会把所指引到的branch引用也会移动到对应commit。