工作中用到的git操作

git rebase

git rebase 原理

$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command
basic-rebase-3.png

找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。 (提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次,将提交到某一分支上的所有修改都移至目标分支,就好像“重新播放”一样。)

注: C4 相对于C2的修改会全部应用于master分支,生成C4',C4和C4'的commitId不是一个是一个全新的commit

参考 https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

git cherry-pick

作用: 将一个分支的所有某一个或者某几个commit 应用的另一个分支上,如果需要讲一个分支的全部变动应用到另一个分支使用git merge

$ git cherry-pick  

git revert

如上图 当我们提交了C0到C3 4个commit 其中C1有bug,想要撤回C1这个commit的修改,可以使用git revert commitId 这个命令;

使用 git revert 可以撤销指定的提交, 要撤销一串提交可以用 .. 语法。 注意这是一个前开后闭区间(不包括 commitId1,但包括 commitId2) (commitId1,commitId2]
C0=>C1=>C2=>C3=>C1' (C1'是C1的抵消(还原)) 使用git revert 会重新生成一个新的commit来抵消还原旧commit

git stash

git stash 应用场景想要切换分支,但是还不想要提交之前的工作;所以贮藏修改。 将新的贮藏推送到栈上 当处理完分支后切换回来在使用git stash pop 将其还原出来

git merge

git merge --no-ff 合并的时候会生成一个新的commit

git merge 不会生成新的commit

git merge --squash 当一个合并发生时,从当前分支和对方分支的共同祖先节点之后的对方分支节点,一直到对方分支的顶部节点将会压缩在一起,使用者可以经过审视后进行提交,产生一个新的节点(把合并分支的所有commit都压缩为一个,处理开发分支提交commit比较乱的情况)。

你可能感兴趣的:(工作中用到的git操作)