目录

hello-gitgit-rebasegit-mergegit-stashgit-cherry-pick

【hello git】git rebase、git merge、git stash、git cherry-pick


https://i-blog.csdnimg.cn/direct/b278fd3a04004284ad45b4e4234174d9.png

共同点: 将 一个分支的提交 合并到 到另一个上分支上去

一、git merge:保留了原有分支的提交结构

https://i-blog.csdnimg.cn/direct/39a98a7faa3b49a3819c7482caef2b27.png

现有一个模型如上所示:master 分支有1 2 3 5 7节点, develop 分支有4 6节点;

在 master 分支上执行 git merge 分支名  

含义:将 develop 上的分支提交合并到 master 上,合并的时候是基于3 7 6节点合并,生成最新的提交记录 ——> 8节点;

二、git rebase:提交分支更加整洁

https://i-blog.csdnimg.cn/direct/2f72542e0a9d4e5db1685b6337f2215c.png

git rebase origin/分支名

一般:
git rebase origin/master

三、git stash

https://i-blog.csdnimg.cn/direct/d69e31cb07594f2f9a603269fe1367c3.png

git stash: 将工作区中已经保存的 和 暂存区的代码进行压栈保存;

使用场景:

场景一:在分支 A 上正在工作,分支 B 上有个 bug 要处理;

git stash            // 在分支 A 上执行该操作,将分支A上的修改代码进行保存
git checkout B       // 切到分支 B,并处理 B 分支上的 bug
git checkout A       // 切回到分支 A
git stash pop        // 将 A 分支之前保存的修改代码进行恢复操作

场景二:冲突:代码开发完了准备提交,在 commit 之前,建议拉一下远端的代码;

git stash                 // 将本地修改代码进行保存
git pull                  // 拉取远端代码
git stash pop             // 将保存的代码弹出
本地处理可能出现的冲突
git commit                // 提交操作
git push

实例演示:

https://i-blog.csdnimg.cn/direct/b748b0034be14f54bcc028851b824e79.png

四、git cherry-pick

将一个分支的提交记录,合并到另外一个分支;

https://i-blog.csdnimg.cn/direct/a6b32d935ef04294ae9bbb1d3ca99d3e.png

git cherry-pick commitid                   // 提交一个commit记录
git cherry-pick commitid1 commitid2        // 提交多个commit记录
git cherry-pick commitid1..commitid2       // 提交多个连续commit记录
git cherry-pick commitid1^..commitid2      // 提交多个连续commit记录,不包含commitid1记录

之后会有冲突:

https://i-blog.csdnimg.cn/direct/984581e761964c918add44edd749a84d.png