Android学习之路(六)—— Git系列

*这里不是git的指令大全。

Android gitignore生效_远程仓库

1. Git仓库数据结构

Git仓库是由一个个提交组成,也就是我们的commit

Android gitignore生效_git_02

  • commit:一次改动的提交,每一次commit只记录了相比上一次提交的改动部分。
  • b4eb0a7642cc1719b1e3582cef932eefe237a91f:代表的是这次提交的哈希值,可以指代这次提交,每个哈希值不一样可以只取一部分代替这一次提交,如b4eb0a。
  • HEAD->master :可以看成一条分支的引用、指针。HEAD是一个特殊的引用,HEAD代表你现在操作的位置,可以指向其中的某一个提交,也可以是某一个分支引用的引用。master一般是主分支,这种一般指向一个分支最新的操作的提交。

Android gitignore生效_android_03

Android gitignore生效_android_04

2. add与commit操作

Android gitignore生效_git_05

staging area:在Git中是为将改动的内容汇集以待提交,也就是图片中的Changes not staged for commit

add指令:暂时使内容加入暂存区,也就是:Changes to be committed:

3. clone命令

clone流程为:

  1. 会先把远程仓库中的所以分支引用取下来,也就是branch,然后把所以branch指向的commit取下来。
  2. 然后把从最开始的commit到master指向的commit都提取出来,然后会把仓库的branch指引与HEAD的指引指向clone下来的仓库镜像,也就是如前面看到的origin/master,这是镜像指引,在本地操作本地仓库事不会修改镜像的位置,只有与远程仓库合并时才会修改与远程仓库对应本地新的指引位置。

4. Git深之Feature Branching

  1. 当需要添加新功能或者修改bug时,需要新建一个Branch来写
  2. 写完一个Branch后,合并到master,然后删除掉一个新的Branch

这里圆圈代表每一个commit,方框为每一次的引用

Android gitignore生效_Android gitignore生效_06

  1. 当需要增加,修改时,就需要新建一个branch,如feature1。
  • 创建一个分支,git branch feature1
  • git checkout feature1 切换到新的分支上,后面的提交也就在feature1延升

Android gitignore生效_学习_07

  1. 当在feature1分支上上传了commit

Android gitignore生效_远程仓库_08

  1. 然后可以往主分支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

Android gitignore生效_git_09

其实可以在git仓库文件中examples.git\logs\refs\中查看到每次提交操作。上面有这次commit对应的上一次hash值,这次的hash值,何人提交提交内容。

Android gitignore生效_远程仓库_10

常用操作

  1. git init:初始创建git仓库
  2. git add:将文件修改部分添加进暂存区

git add -i :交互式添加

当需要某一部分修改添加进仓库时可以使用,防止一次性添加过多无法区分。

5. rebase

把当前 commit(以及它之前的 commits)应⽤到指定的需要 rebase 的 commit 上。

但是每一个commit一但提交确定就无法修改,所以就会新创建需要挪动的commit,如下面红色的commit;

Android gitignore生效_远程仓库_11

rebase也会出现冲突,与merge冲突一样操作。

1. reset

  1. git reset 指定commit 移动到指定 commit,并保留 working tree 的内容
  2. git reset --hard 指定commit 移动到指定 commit,并重置 working tree
  3. reset与checkout一样都是移动HEAD,但是reset会把所指引到的branch引用也会移动到对应commit。