有如下版本库的树型结构
![image image](https://i-blog.csdnimg.cn/blog_migrate/6f6d143aafd4c219d4d61e180a2c378b.png)
(一)git cherry
如下图示:左上图①表示本地当前提交的历史记录。右上图②是远程库当前提交的历史记录。图③是两都之间的差异。默认比较本地分支(HEAD)和远程分支, 即当前分支和当前分支追踪的远程分支。找到本地提交列表中,尚未推送到远程的提交。等同如下git cherry origin/b1 b1(超前者为第二参数)
git cherry origin/b1 head
![image image](https://i-blog.csdnimg.cn/blog_migrate/af30bd3d38ef81e0aeab3732f238859a.png)
由图④可以看出本地b1超前于远程b1一个提交。
![image image](https://i-blog.csdnimg.cn/blog_migrate/59af1fe7f8a7e50048b408ea1a03e8bb.png)
(二)git cherry-pick
![image image](https://i-blog.csdnimg.cn/blog_migrate/4ce7094d91b2b40f39532d0421b56d82.png)
(三)git stash
有如下版本库:当前版本库的提交状态如下图所示
![image image](https://i-blog.csdnimg.cn/blog_migrate/876e0ab32efd45dc8b64852d639db383.png)
修改test.txt为如下内容
![image image](https://i-blog.csdnimg.cn/blog_migrate/a8f04de11c0852610eeb6e5788b3a7f6.png)
![image image](https://i-blog.csdnimg.cn/blog_migrate/81a801cc62d34ebfbb21560bbdb6f23b.png)
(四)git commit
(五)git fork:
如下图有share1.git,share2.git、share3.git三个版本库,其中share1.git和share2.git是两个单独的开源项目版本库。share3.git版本库是基于share1.git、share2.git两个开源项目版本库开发的本地项目版本库。此时share1.git、share2.git版本库将作为share3.git版本库的上游库而存在。如何能保证share3.git能与上游share1.git、share2.git版本库更新同步?
![image image](https://i-blog.csdnimg.cn/blog_migrate/65694d4c79de3b7234ef9a47894f51d9.png)
场景一:关联share3.git到share1.git、share2.git,并更新开源版本库代码到本地库share3中
![image image](https://i-blog.csdnimg.cn/blog_migrate/739b398f9d4926fa18b00defc31b490b.png)
(六)git fetch
(七)git reset:有如下所示的版本树结构,从a4f767e经历了两次提交后此时head指向9678728位置。
![image image](https://i-blog.csdnimg.cn/blog_migrate/336829d955ebc22985895a4a230ab8e1.png)
①:git reset –soft a4f767e 如下图记录了此次操作的变化。此时在.git文件夹下会产生一个ORIG_HEAD文件来记录原始的head值。变化到a47后head指向发生了变化。但是暂存区和工作区的文件并没有改变。(保留了上图⑥所处的状态,即ORIG_HEAD=9678728b5指向的版本区和工作区状态)如果基于变化后进行提交则可以将head改变到a47处。丢弃了之前的两次提交且工作区文件没有变化。
![image image](https://i-blog.csdnimg.cn/blog_migrate/276e3d384891913cff247873f5443c0b.png)
②:git reset –hard a4f767e2 如下图所示,reset –hard操作修改了index文件和工作文件。(回到上图④所处的状态即当前head:a4f767e2工作区和版本区的状态)
![image image](https://i-blog.csdnimg.cn/blog_migrate/babe188b2201e7edf737e88ee6d84e22.png)
③:git reset –mixed head^^: 如下图所示
不修改工作区文件(保留了上图⑥所处的状态,即ORIG_HEAD=9678728b5指向的版本区和工作区状态)。
修改暂存区文件index。(回到上图④所处的状态即当前head:a4f767e2版本区的状态)
![image image](https://i-blog.csdnimg.cn/blog_migrate/6c44da9a6deae6cb56c6ecc3a2ac0e72.png)
git commit时会
git stash
git stash list
git stash pop
git系列之(四)git stash工作原理
https://www.cnblogs.com/yelbosh/p/7471979.html
https://www.jianshu.com/p/d73dcee2d907