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

posted @ 2020-09-09 22:36  lingr7  阅读(814)  评论(0编辑  收藏  举报