当前位置: 首页 > news >正文 郑州网站制作选择乐云seo上海高端网站设计 news 2025/11/3 15:33:10 郑州网站制作选择乐云seo,上海高端网站设计,网站内部资源推广的基本方法,建设银行网站信任文章目录 变基的基础用法变基过程中的冲突解决冲突后无法push问题更新变基后的代码更有趣的变基用法变基的风险用变基解决变基变基 vs 合并 此文在阅读前需要有一定的git命令基础#xff0c;若基础尚未掌握#xff0c;建议先阅读这篇文章Git命令播报详版 在 Git 中整合来自不… 文章目录 变基的基础用法变基过程中的冲突解决冲突后无法push问题更新变基后的代码更有趣的变基用法变基的风险用变基解决变基变基 vs 合并 此文在阅读前需要有一定的git命令基础若基础尚未掌握建议先阅读这篇文章Git命令播报详版 在 Git 中整合来自不同分支的修改主要有两种方法merge 以及 rebase(变基)本文主要讲解rebase用法。 变基的基础用法 当开发任务分叉到两个不同分支又各自提交了更新。 整合分支最容易的方法是 merge 命令。 它会把两个分支的最新快照C3 和 C4以及二者最近的共同祖先C2进行三方合并合并的结果是生成一个新的快照C5并提交。 还有一种方法你可以提取在 C4 中引入的补丁和修改然后在 C3 的基础上应用一次。 在 Git 中这种操作就叫做 变基rebase。 你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上就好像“重新播放”一样。 在这个例子中你可以检出 experiment 分支然后将它变基到 master 分支上 git checkout experiment git rebase master它的原理是首先找到这两个分支即当前分支 experiment、变基操作的目标基底分支 master 的最近共同祖先 C2然后对比当前分支相对于该祖先的历次提交提取相应的修改并存为临时文件 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。 现在回到 master 分支进行一次快进合并。将 C4 中的修改变基到 C3 上 git checkout master git merge experiment此时C4’ 指向的快照就和 merge示例中 C5 指向的快照一模一样了。 这两种整合方法的最终结果没有任何区别但是变基使得提交历史更加整洁。你在查看一个经过变基的分支的历史记录时会发现尽管实际的开发工作是并行的但它们看上去就像是串行的一样提交历史是一条直线没有分叉。 一般我们这样做的目的是为了确保在向远程分支推送时能保持提交历史的整洁例如向某个其他人维护的项目贡献代码时。在这种情况下你首先在自己的分支里进行开发当开发完成时你需要先将你的代码变基到 master 上然后再向主项目提交修改。这样的话该项目的维护者就不再需要进行整合工作只需要快进合并便可。 请注意无论是通过变基还是通过三方合并整合的最终结果所指向的快照始终是一样的只不过提交历史不同罢了。 变基是将一系列提交按照原有次序依次应用到另一分支上而合并是把最终结果合在一起。 变基过程中的冲突 在合并中经常会出现冲突。在解决冲突后执行如下命令 git add . git rebase --continue如果冲突无法解决可以执行 git rebase --abort取消这次合并操作。 解决冲突后无法push问题 有过git rebase经验的同学都知道多人协作并行开发时刚解决完一堆冲突后松了一口气push时又提示拒绝用-f或者--force参数强制推送发现就推送成功了。 提交失败的原因我个人是这么理解的使用 rebase 之后experiment分支上比master分支上多的修改直接“插入”到了master分支修改的内容之后也就是 experiment 分支的修改在 master 分支上重演了一遍相对远程 master 分支而言本地仓库的master分支的“基底”已经变化了直接 push 是不行的所以确保没有问题的情况下必须使用 --force 参数才能提交。 但很多人可能忽略了一个问题 git push --force 是不安全的。 生产过程中碰到过一次rebase后强制push同一分支的其他同学pull代码时出错强行覆盖也不行。所以除非有充分的强制推送理由其他情况下不建议使用git push --force 这里将推荐 --force-with-lease 参数让我们可以更安全地进行强制推送Git 的 1.8.5 版本开始提供了这个参数旨在解决 git push --force 命令造成的安全问题。 关于git push --force-with-lease更加详细的可以自己查查这里推荐一篇Git 更安全的强制推送–force-with-lease 更新变基后的代码 更新代码使用的是 git pull origin master --rebase 而不是 git pull origin experiment。 git pull 这条命令默认使用了 --merge 的方式更新代码如果你不指定用 --rebase有的时候就会发现日志里有自己分支合并到了自己分支提交的提交记录。 更有趣的变基用法 在对两个分支进行变基时所生成的“重放”并不一定要在目标分支上应用你也可以指定另外的一个分支进行应用。 如下示例你创建了一个主题分支 server为服务端添加了一些功能提交了 C3 和 C4。 然后从 C3 上创建了主题分支 client为客户端添加了一些功能提交了 C8 和 C9。 最后你回到 server 分支又提交了 C10。 假设你希望将 client 中的修改合并到主分支并发布但暂时并不想合并 server 中的修改 因为它们还需要经过更全面的测试。这时你就可以使用 git rebase 命令的 --onto 选项 选中在 client 分支里但不在 server 分支里的修改即 C8 和 C9将它们在 master 分支上重放 git rebase --onto master server client以上命令的意思是“取出 client 分支找出它从 server 分支分歧之后的补丁 然后把这些补丁在 master 分支上重放一遍让 client 看起来像直接基于 master 修改一样”。这理解起来有一点复杂不过效果非常酷。 现在可以快进合并 master 分支了。如图 快进合并 master 分支使之包含来自 client 分支的修改 git checkout master git merge client接下来你决定将 server 分支中的修改也整合进来。 使用 git rebase basebranch topicbranch 命令可以直接将主题分支 即本例中的 server变基到目标分支即 master上。 这样做能省去你先切换到 server 分支再对其执行变基命令的多个步骤。 git rebase master server如图 将 server 中的修改变基到 master 上 所示server 中的代码被“续”到了 master 后面。 然后就可以快进合并主分支 master 了 git checkout master git merge server至此client 和 server 分支中的修改都已经整合到主分支里了 你可以删除这两个分支最终提交历史会变成图 最终的提交历史 中的样子 git branch -d client git branch -d server变基的风险 变基也并非完美无缺要用它得遵守一条准则 如果提交存在于你的仓库之外而别人可能基于这些提交进行开发那么不要执行变基。 变基操作的实质是丢弃一些现有的提交然后相应地新建一些内容一样但实际上不同的提交。 如果你已经将提交推送至某个仓库而其他人也已经从该仓库拉取提交并进行了后续工作此时如果你用 git rebase 命令重新整理了提交并再次推送你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合如果接下来你还要拉取并整合他们修改过的提交事情就会变得一团糟。 让我们来看一个在公开的仓库上执行变基操作所带来的问题。 假设你从一个中央服务器克隆然后在它的基础上进行了一些开发。 你的提交历史如图所示 然后某人又向中央服务器提交了一些修改其中还包括一次合并。 你抓取了这些在远程分支上的修改并将其合并到你本地的开发分支然后你的提交历史就会变成这样 接下来这个人又决定把合并操作回滚改用变基继而又用 git push --force 命令覆盖了服务器上的提交历史。 之后你从服务器抓取更新会发现多出来一些新的提交。 结果就是你们两人的处境都十分尴尬。 如果你执行 git pull 命令你将合并来自两条提交历史的内容生成一个新的合并提交最终仓库会如图所示 此时如果你执行 git log 命令你会发现你将相同的内容又合并了一次生成了一个新的提交会出现两个提交的作者、日期、日志居然是一样的这会令人感到混乱。 此外如果你将这一堆又推送到服务器上你实际上是将那些已经被变基抛弃的提交又找了回来这会令人感到更加混乱。 很明显对方并不想在提交历史中看到 C4 和 C6因为之前就是他把这两个提交通过变基丢弃的。 用变基解决变基 如果你 真的 遭遇了类似的处境Git 还有一些高级魔法可以帮到你。 如果团队中的某人强制推送并覆盖了一些你所基于的提交你需要做的就是检查你做了哪些修改以及他们覆盖了哪些修改。 实际上Git 除了对整个提交计算 SHA-1 校验和以外也对本次提交所引入的修改计算了校验和——即 “patch-id”。 如果你拉取被覆盖过的更新并将你手头的工作基于此进行变基的话一般情况下 Git 都能成功分辨出哪些是你的修改并把它们应用到新分支上。 举个例子如果遇到前面提到的 有人推送了经过变基的提交并丢弃了你的本地开发所基于的一些提交 那种情境如果我们不是执行合并而是执行 git rebase teamone/master, Git 将会 检查哪些提交是我们的分支上独有的C2C3C4C6C7 检查其中哪些提交不是合并操作的结果C2C3C4 检查哪些提交在对方覆盖更新时并没有被纳入目标分支只有 C2 和 C3因为 C4 其实就是 C4’ 把查到的这些提交应用在 teamone/master 上面 从而我们将得到与 你将相同的内容又合并了一次生成了一个新的提交 中不同的结果如图 在一个被变基然后强制推送的分支上再次执行变基 所示。 要想上述方案有效还需要对方在变基时确保 C4’ 和 C4 是几乎一样的。 否则变基操作将无法识别并新建另一个类似 C4 的补丁而这个补丁很可能无法整洁的整合入历史因为补丁中的修改已经存在于某个地方了。 在本例中另一种简单的方法是使用 git pull --rebase 命令而不是直接 git pull。 又或者你可以自己手动完成这个过程先 git fetch再 git rebase teamone/master。 如果你习惯使用 git pull 同时又希望默认使用选项 --rebase你可以执行这条语句 git config --global pull.rebase true 来更改 pull.rebase 的默认配置。 如果你只对不会离开你电脑的提交执行变基那就不会有事。 如果你对已经推送过的提交执行变基但别人没有基于它的提交那么也不会有事。 如果你对已经推送至共用仓库的提交上执行变基命令并因此丢失了一些别人的开发所基于的提交 那你就有大麻烦了你的同事也会因此鄙视你。 如果你或你的同事在某些情形下决意要这么做请一定要通知每个人执行 git pull --rebase 命令这样尽管不能避免伤痛但能有所缓解。 变基 vs 合并 至此你已学习了变基和合并的用法你一定会想问到底哪种方式更好。 在回答这个问题之前让我们退后一步想讨论一下提交历史到底意味着什么。 有一种观点认为仓库的提交历史即是 记录实际发生过什么。 它是针对历史的文档本身就有价值不能乱改。 从这个角度看来改变提交历史是一种亵渎你使用 谎言 掩盖了实际发生过的事情。 如果由合并产生的提交历史是一团糟怎么办 既然事实就是如此那么这些痕迹就应该被保留下来让后人能够查阅。 另一种观点则正好相反他们认为提交历史是 项目过程中发生的事。 没人会出版一本书的第一版草稿软件维护手册也是需要反复修订才能方便使用。 持这一观点的人会使用 rebase 及 filter-branch 等工具来编写故事怎么方便后来的读者就怎么写。 现在让我们回到之前的问题上来到底合并还是变基好希望你能明白这并没有一个简单的答案。 Git 是一个非常强大的工具它允许你对提交历史做许多事情但每个团队、每个项目对此的需求并不相同。 既然你已经分别学习了两者的用法相信你能够根据实际情况作出明智的选择。 总的原则是只对尚未推送或分享给别人的本地修改执行变基操作清理历史 从不对已推送至别处的提交执行变基操作这样你才能享受到两种方式带来的便利。 文章转载自: http://www.morning.pplxd.cn.gov.cn.pplxd.cn http://www.morning.zyndj.cn.gov.cn.zyndj.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.nfdty.cn.gov.cn.nfdty.cn http://www.morning.sqtsl.cn.gov.cn.sqtsl.cn http://www.morning.pbgnx.cn.gov.cn.pbgnx.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.slzkq.cn.gov.cn.slzkq.cn http://www.morning.wwklf.cn.gov.cn.wwklf.cn http://www.morning.gpryk.cn.gov.cn.gpryk.cn http://www.morning.qmnjn.cn.gov.cn.qmnjn.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.kjawz.cn.gov.cn.kjawz.cn http://www.morning.htbgz.cn.gov.cn.htbgz.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.rxhn.cn.gov.cn.rxhn.cn http://www.morning.xlbyx.cn.gov.cn.xlbyx.cn http://www.morning.yqjjn.cn.gov.cn.yqjjn.cn http://www.morning.rdzlh.cn.gov.cn.rdzlh.cn http://www.morning.qqxmj.cn.gov.cn.qqxmj.cn http://www.morning.nfmtl.cn.gov.cn.nfmtl.cn http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.xglgm.cn.gov.cn.xglgm.cn http://www.morning.hclplus.com.gov.cn.hclplus.com http://www.morning.bkfdf.cn.gov.cn.bkfdf.cn http://www.morning.drfcj.cn.gov.cn.drfcj.cn http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn http://www.morning.rjfr.cn.gov.cn.rjfr.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.bklhx.cn.gov.cn.bklhx.cn http://www.morning.yqpzl.cn.gov.cn.yqpzl.cn http://www.morning.yxyyp.cn.gov.cn.yxyyp.cn http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn http://www.morning.rxcqt.cn.gov.cn.rxcqt.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.rnngz.cn.gov.cn.rnngz.cn http://www.morning.syglx.cn.gov.cn.syglx.cn http://www.morning.zdsdn.cn.gov.cn.zdsdn.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.lgwpm.cn.gov.cn.lgwpm.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.sfwd.cn.gov.cn.sfwd.cn http://www.morning.lyhry.cn.gov.cn.lyhry.cn http://www.morning.wlsrd.cn.gov.cn.wlsrd.cn http://www.morning.fmrd.cn.gov.cn.fmrd.cn http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn http://www.morning.mglqf.cn.gov.cn.mglqf.cn http://www.morning.clpdm.cn.gov.cn.clpdm.cn http://www.morning.dqzcf.cn.gov.cn.dqzcf.cn http://www.morning.jghqc.cn.gov.cn.jghqc.cn http://www.morning.gnhsg.cn.gov.cn.gnhsg.cn http://www.morning.xdhcr.cn.gov.cn.xdhcr.cn http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.gcqdp.cn.gov.cn.gcqdp.cn http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.ktcfl.cn.gov.cn.ktcfl.cn http://www.morning.bqts.cn.gov.cn.bqts.cn http://www.morning.xxwl1.com.gov.cn.xxwl1.com http://www.morning.yesidu.com.gov.cn.yesidu.com http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn http://www.morning.fygbq.cn.gov.cn.fygbq.cn http://www.morning.qdsmile.cn.gov.cn.qdsmile.cn http://www.morning.mkydt.cn.gov.cn.mkydt.cn http://www.morning.tktcr.cn.gov.cn.tktcr.cn http://www.morning.jyznn.cn.gov.cn.jyznn.cn http://www.morning.trnhy.cn.gov.cn.trnhy.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.lsfrc.cn.gov.cn.lsfrc.cn http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.lrwsk.cn.gov.cn.lrwsk.cn http://www.morning.ghpld.cn.gov.cn.ghpld.cn http://www.morning.tldfp.cn.gov.cn.tldfp.cn http://www.morning.klyzg.cn.gov.cn.klyzg.cn http://www.morning.mqgqf.cn.gov.cn.mqgqf.cn 查看全文 http://www.tj-hxxt.cn/news/274080.html 相关文章: 如何在自己电脑上建网站网站上做销售网点怎么做 网站怎么做导航网站注销怎么做消 承包建筑工程信息网站微网站设计方案 如何利用织梦cms做企业网站哈尔滨网站建设步骤 玉林网站建设医院网站制作多少钱 电子产品网站建设模板抖音代运营案例 影视播放网站建设手机网站与app的区别 gta5线下买房网站建设做搜狗网站点 网站建设试题卷wordpress get_template_part 一个空间可以放几个网站宁波网站免费制作 单页销售网站模板泰安vx 邵阳 网站开发 招聘百度网页翻译功能在哪 太原做网站哪里好防水网站的外链如何找 一个域名绑定多个网站石家庄快速网站搭建 陕西网站建设维护aso优化重要吗 网站做后台php购物网站搜索栏怎么做 互联网网站建设彭聪医院网站建设山东 基于html5的旅游网站的设计深圳网站设计x 商业网站建设案例课程 下载免费网上申请注册 汕头市网站建设何为网站开发 百度推广网站建设英文网站建设哪家强 平台网站建设过程江苏建设人才网证书查询 xxx网站建设策划书范文二手书网站开发需求分析 徐州建站软件广西建设局网站首页 建设单位到江川区住房和城乡建设局网站采购 沼气服务网站建设管理wordpress扩展主题核心文件 合肥百度推广优化win7优化工具哪个好用 珠海网站建易搜互联小说网页制作步骤 惠州网站建设项目网络由箭线和节点构成 大学 建网站唐山网站建设哪家好