赞
踩
Git rebase
git original log:
目前有多于三个的log,而我想要合并最近的两个 log, 也就是上图中紫色的圈和黄色的圈,所以这个时候使用rebase的方式如下:
git rebase -i ee9ee598ea2a4bece9b23
注意这个时候的应该使用的log的编码是红色的圈,虽然我想要合并紫色和黄色,但是需要在红色圈的基础上进行合并,所以需要填入ee9ee598
填完之后,需要对log进行重新选择,
- pick 82b5047 Changes for MapLoad (changed InitKeyFrame for EUCM based on ORI_Ver)
- pick eddaa2b Load Map
- # Rebase a71eba2..e1a7dfa onto a71eba2
- # Commands:
- # p, pick = use commit
- # r, reword = use commit, but edit the commit message
- # e, edit = use commit, but stop for amending
- # s, squash = use commit, but meld into previous commit
- # f, fixup = like "squash", but discard this commit's log message
- # x, exec = run command (the rest of the line) using shell
- #
- # These lines can be re-ordered; they are executed from top to bottom.
- #
- # If you remove a line here THAT COMMIT WILL BE LOST.
- #
- # However, if you remove everything, the rebase will be aborted.
- #
- # Note that empty commits are commented out
这个文件中的log是按照提交的时间顺序来的,提交的时间最早的log,就会在 出现在 最上面,这样给了我们更清楚的知识,究竟保留哪个,去掉哪个?
pick即为保留的意思,如果pick某个hash,那个这一次提交的代码修改将会被保存;
squash表示那一次的提交内容将会和它的上一个log合并到一起;squash很适用于那种commit完成后发现自己没有add全的情况;
reword表示当前的commit记录会被保留,但是允许你修改commit的comment,使用与commit -m ”“ 时写错log的情况;
fixup就更彻底了,会将当前的提交代码与上一次的提交合并到一起,同时直接删除掉当前的log message,跟在下面图2的文件中注释掉其实是一样的效果;
一般情况下,squash是最常用的,即保留文件中的修改和commit的提交,只是将这次的commit与上一次的合并而已,所以需要将上述文件修改成:
- pick 82b5047 Changes for MapLoad (changed InitKeyFrame for EUCM based on ORI_Ver)
- s eddaa2b Load Map
然后ctrl+x 离开,其中会提示是否需要保存,选择YES即可;
然后会遇到如下文件:
这个文件主要是需要选择新的commit 的comment,也就是log message内容,如果不想要什么可以直接用#把他们注释掉,
因为我合并和紫色和黄色的两个圈圈log,并且觉得黄色圈圈的log内容更加准确,所以,就选择留下第三行的文字;
那么最后合并后的log内容为
从如上的合并可以看出,红色的圈圈没变,但是紫色圈圈和黄色圈圈都不存在了,而合并成立绿色圈圈,同时绿色圈圈的commit 内容选用了紫色圈圈的内容;
更多理论参考:
https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。