wordpress怎么中文,seo排名,wordpress二手车模板,谷歌浏览器网页版在线转载自#xff1a;https://segmentfault.com/q/1010000007704573/ 我猜现实中的情况是这样的#xff1a;
使用 git 的人群中#xff0c;不会用 rebase#xff08;哪怕是基础功能的#xff09;的至少一半#xff08;这个估计恐怕很保守了#xff09; 剩下一半里真正理解… 转载自https://segmentfault.com/q/1010000007704573/ 我猜现实中的情况是这样的
使用 git 的人群中不会用 rebase哪怕是基础功能的的至少一半这个估计恐怕很保守了 剩下一半里真正理解何时应该正确 rebase 的恐怕也就一半…… merge 还是 rebase 并不是一个二者选其一的问题而是应该根据具体情况来选择使用而这个“具体情况”在现实中实在是不好一一列举出来了对于大多数开发者来说在团队中的职能比较单一也不是经常有机会遇到所以在这里我只总结两个人人都应该理解并遵守的准则
当你从 remote 去 pull 的时候永远使用 rebase除了一个例外后面会讲 当你完成了一个功能假定你是单独开本地分支去做的后打算合并到主干分支的时候永远使用 merge 开发者应当理解不同的合并策略影响的或许不是最终的代码结果但却会影响 git 如何记录提交的历史尽管很多时候这种理解只对个别人受益而对自己没有什么影响。其他的人在使用这些历史的时候比如 code review 的时候或者 bisect 的时候等等会因为过去你做过的事情而感到无比幸福或痛苦。
第二点比较容易理解把开发一个功能的具体细节隐藏在本地分支中而把最终的结果作为一条完整的记录合并merge到主干分支去。
关键是第一点。大多数情况下大家会选择默认的 pull也就是 fetch merge于是我们会看到主干上不停的出现 Merge commit xxx into xxx 之类的干扰信息。如果所有的人都图方便这么干那就永远都别想有干净漂亮的历史树了取而代之是类似这样的东西 如果你去 clone 一个正确使用 git 的项目你绝对不会看到上图这样乱七八糟的 master。为什么呢答案就是git pull –rebase这条命令会使用 rebase 来代替默认的 pull 对合并的历史树进行变基处理就可以避免因为无法快进fast forward而产生的额外合并记录。
现在绝大多数的 git 客户端都允许设置 git pull 的默认行为是 –rebase所以掌握了这个诀窍可以让大部分的日常拉取操作都产生清爽漂亮的历史记录但这并不是完美的结局。有一种例外是这样的
在你使用 git merge 完成了一个功能分支向主干分支的合并之后当然是 –no-ff 的 在你运行 git fetch 发现远程主干又领先你若干提交 此时你若 git pull –rebase你会发现你刚才合并功能分支的记录没了…… 这是因为变基会忽略合并记录因此变基命令会有一个特别的参数叫做–preserve-merges 用于重建被忽略的合并记录。所以比 git pull –rebase 更好的方案就是用 git fetch git rebase -p 代替之。
当然这个仅针对上面提到的特殊情况随着 git 的升级说不好哪一天就不存在这种问题了也不一定。我一般都不会遇到这种情况因为我都是这么做的
完成功能分支之后先不 merge而是回到主干分支去 git pull –rebase 如果主干有更新rebase 更新的内容到功能分支来预检一下看看在加入了最近别人的改动之后我的功能是否依然 OK在这个过程中可能会有冲突处理别怪我没提醒哦 一切就绪之后再次 git fetch 主干看看有没有变动因为在第二步的进行期间没准又有人 push 了新的变化有的话重复第二步没有则—— 合并功能分支到主干然后 push收工。 我这么做可以避免前面提到的意外看似复杂了些但其实做熟练了之后也没什么难度更重要的原因是 git rebase -p 是有缺陷的
不能和 git pull 连用一条命令分成俩怎么都觉得“亏”了虽说你可以写脚本但最好不要因为习惯了之后反而有时候会害了你 由于无法和 git pull 配合使用所以你必须指明目标分支给 rebase这一点比较烦人特别是很多 GUI 客户端压根不支持 git rebase -p 的时候我经常会在 CLIGUI 之间切换环境使用 git ORIG_HEAD 会被破坏。 ORIG_HEAD 在很多情形下非常有用比如说你可以用 git log -p -reverse ORIG_HEAD 来回看最近一次合并所产生的所有变化等等。–preserve-merges 会让它失去本来应该指向的位置你不得不先找到正确的 hash 来代替它这会有点烦。
以上答案最终说明一件事情现实的复杂性永远超出你在菜鸟时期所能做出的想象真想把 git 用好那就要在日常工作的基础上好好理解 git 的工作原理吧可以去看官方网站电子书中文版里面的 git internal 一节仔细看懂之后该用什么命令心里就有数了。
补充一点如果你的团队不在乎主干分支上有很多不重要的干扰提交记录那你可以始终使用 rebase这样至少可以不会出现很多分岔处理得当也可以得到干净但是啰嗦的主干分支历史记录。