美文网首页
工作中用到的git操作

工作中用到的git操作

作者: 冷暖自知_zjz | 来源:发表于2021-07-13 10:22 被阅读0次

    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 <commitA> <commitB>
    

    git revert

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

    使用 git revert <commitId> 可以撤销指定的提交, 要撤销一串提交可以用 <commitId1>..<commitId2> 语法。 注意这是一个前开后闭区间(不包括 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操作

          本文链接:https://www.haomeiwen.com/subject/dxsiultx.html