zoukankan      html  css  js  c++  java
  • git重构提交树:分支、变基和挑拣提交的用法

    在Push时报错

    一种解决方案是

    git push remote-name --delete branch-name
    
    git push remote-name  branch-name
    

    删除远程仓库的远程分支,之后Push一个同名的分支,即可解决Push报错问题

    合并提交

    这个是用变基命令,重写历史的一部分。
    可以运用

    git rebase -i HEAD~num
    

    在通过指定pick squash等内容来实现合并几次提交。
    把出现在下方的提交,标记为squash,即可让这几次提交被合并。

    挑拣

    提交树依赖情况
    挑拣前

    git cherry-pick e43a6
    

    挑拣后
    挑拣后
    注意配合分支命令。branch 可以随时指定某个任意的提交id来创建分支,这非常方便和重要,参考可以自由在提交树上移动。在提交树上自由移动,参考游戏中学git

    提交多次但是合并请求审核时:审核者要求一次合并请求对应一次提交编译审核。

    可能会想到的解决问题的命令是revert reset rebase cherry-pick等等,但是其实用branch就可以
    因为branch 可以随时指定某个任意的提交id来创建分支,所以可以把这多次提交,指定为多个分支,push时创建并push到分别的远程分支上即可做到一次提交对应一个合并请求。

    移动到某次提交的状态

    这是在提交树上自由移动的一种延伸用法。

    git branch branch-name commit-id
    

    可以给某个提交id指定分支名,这样,就可以方便地切换到这一分支,也就是可以随时切换到某次提交的状态,便于将来可能的Push。

    重构提交树

    branch :随时给提交id指定分支名即创建对应分支
    cherry-pick: 随时挑拣需要的提交到当前分支
    rebase: 方便的变基
    以上三条命令,交替结合使用,可以非常方便的构建出自己想要的提交树形态

    git变基重写历史push前与push后

    代码提交到git上有一套规范。比如提交日志的写法。

    git push reponame branchname
    

    再提交 commit 之后,可能有点微调,可能就是想调整一下提交信息。

    那么使用

    git commit --amend
    

    就可以了。

    这个命令我理解为对 git rebase -i HEAD~ 的一种简单封装。

    想要干净的提交树。分以下两种情况。

    push之前重写历史

    这主要就是使用 git rebase -i 注意有的之前使用过 rebase 的,可能日志信息条数被压缩过。

    在push之前重写历史,是最容易的。在Progit 中文第二版242页中,有详细介绍,不赘述。

    push之后重写历史

    这是我的认知盲区,对分支使用不熟练,潜意识里不敢删除分支,其实在git里这种担心很没有必要,随时新建一个分支,删除一个分支。在 push 了一堆无效提交到远程仓库后,想要重建一个干净的提交树。

    那么在没有别人在使用 push 成果的情况下,可以直接

    git push reponame --delete branchname
    

    把本地通过 rebase 调整过的提交树 push 上去就可以了。

    git push reponame branchname
    

    附录

    在使用 rebase 重写历史的时候。

    注意处理冲突,处理完后要

    git rebase --continue
    

    继续确认提交日志信息。

    同时要确认清楚多个修改过的信息。

    同时,多用 git statusgit add 确认修改被git记录到。

    资料就是Progit中文第二版和交互式教程https://learngitbranching.js.org/?locale=zh_CN

  • 相关阅读:
    堆栈学习
    需要阅读的书籍
    Rust Book Lang Ch.19 Fully Qualified Syntax, Supertraits, Newtype Pattern, type aliases, never type, dynamic sized type
    Rust Lang Book Ch.19 Placeholder type, Default generic type parameter, operator overloading
    Rust Lang Book Ch.19 Unsafe
    Rust Lang Book Ch.18 Patterns and Matching
    Rust Lang Book Ch.17 OOP
    Rust Lang Book Ch.16 Concurrency
    Rust Lang Book Ch.15 Smart Pointers
    HDU3966-Aragorn's Story-树链剖分-点权
  • 原文地址:https://www.cnblogs.com/lingr7/p/13642644.html
Copyright © 2011-2022 走看看