.. SPDX-License-Identifier: GPL-2.0 .. include:: ../disclaimer-zh_CN.rst :Original: Documentation/maintainer/rebasing-and-merging.rst :译者: å´æƒ³æˆ Wu XiangCheng <bobwxc@email.cn> ========== å˜åŸºä¸Žåˆå¹¶ ========== 一般æ¥è¯´ï¼Œç»´æŠ¤å系统需è¦ç†Ÿæ‚‰Gitæºä»£ç 管ç†ç³»ç»Ÿã€‚Git是一个功能强大的工具,有 很多功能;就åƒè¿™ç±»å·¥å…·å¸¸å‡ºçŽ°çš„æƒ…å†µä¸€æ ·ï¼Œä½¿ç”¨è¿™äº›åŠŸèƒ½çš„æ–¹æ³•æœ‰å¯¹æœ‰é”™ã€‚æœ¬æ–‡æ¡£ 特别介ç»äº†å˜åŸºä¸Žåˆå¹¶çš„用法。维护者ç»å¸¸åœ¨é”™è¯¯ä½¿ç”¨è¿™äº›å·¥å…·æ—¶é‡åˆ°éº»çƒ¦ï¼Œä½†é¿å… 问题实际上并ä¸é‚£ä¹ˆå›°éš¾ã€‚ 总的æ¥è¯´ï¼Œéœ€è¦æ³¨æ„的一点是:与许多其他项目ä¸åŒï¼Œå†…æ ¸ç¤¾åŒºå¹¶ä¸å®³æ€•åœ¨å…¶å¼€å‘åŽ†å² ä¸çœ‹åˆ°åˆå¹¶æ交。事实上,考虑到该项目的规模,é¿å…åˆå¹¶å‡ 乎是ä¸å¯èƒ½çš„。维护者会 在希望é¿å…åˆå¹¶æ—¶é‡åˆ°ä¸€äº›é—®é¢˜ï¼Œè€Œè¿‡äºŽé¢‘ç¹çš„åˆå¹¶ä¹Ÿä¼šå¸¦æ¥å¦ä¸€äº›é—®é¢˜ã€‚ å˜åŸº ==== “å˜åŸºï¼ˆRebase)â€æ˜¯æ›´æ”¹å˜å‚¨åº“ä¸ä¸€ç³»åˆ—æ交的历å²è®°å½•çš„过程。有两ç§ä¸åŒåž‹çš„æ“作 都被称为å˜åŸºï¼Œå› 为这两ç§æ“作都使用 ``git rebase`` 命令,但它们之间å˜åœ¨æ˜¾è‘— 差异: - 更改一系列补ä¸çš„父æ交(起始æ交)。例如,å˜åŸºæ“作å¯ä»¥å°†åŸºäºŽä¸Šä¸€å†…æ ¸ç‰ˆæœ¬ 的一个补ä¸é›†é‡å»ºåˆ°å½“å‰ç‰ˆæœ¬ä¸Šã€‚在下é¢çš„讨论ä¸ï¼Œæˆ‘们将æ¤æ“作称为“å˜æ ¹â€ã€‚ - 通过修å¤ï¼ˆæˆ–åˆ é™¤ï¼‰æŸåçš„æ交ã€æ·»åŠ è¡¥ä¸ã€æ·»åŠ æ ‡è®°ä»¥æ›´æ”¹ä¸€ç³»åˆ—è¡¥ä¸çš„历å²ï¼Œ æ¥æ交å˜æ›´æ—¥å¿—或更改已应用æ交的顺åºã€‚在下文ä¸ï¼Œè¿™ç§ç±»åž‹çš„æ“ä½œç§°ä¸ºâ€œåŽ†å² ä¿®æ”¹â€ æœ¯è¯â€œå˜åŸºâ€å°†ç”¨äºŽæŒ‡ä»£ä¸Šè¿°ä¸¤ç§æ“作。如果使用得当,å˜åŸºå¯ä»¥äº§ç”Ÿæ›´æ¸…æ™°ã€æ›´æ•´æ´çš„ å¼€å‘历å²ï¼›å¦‚果使用ä¸å½“,它å¯èƒ½ä¼šæ¨¡ç³ŠåŽ†å²å¹¶å¼•å…¥é”™è¯¯ã€‚ 以下一些ç»éªŒæ³•åˆ™å¯ä»¥å¸®åŠ©å¼€å‘者é¿å…最糟糕的å˜åŸºé£Žé™©ï¼š - å·²ç»å‘å¸ƒåˆ°ä½ ç§äººç³»ç»Ÿä¹‹å¤–世界的历å²é€šå¸¸ä¸åº”更改。其他人å¯èƒ½ä¼šæ‹‰å–ä½ çš„æ ‘ 的副本,然åŽåŸºäºŽå®ƒè¿›è¡Œå·¥ä½œï¼›ä¿®æ”¹ä½ çš„æ ‘ä¼šç»™ä»–ä»¬å¸¦æ¥éº»çƒ¦ã€‚如果工作需è¦å˜åŸºï¼Œ 这通常是表明它还没有准备好æ交到公共å˜å‚¨åº“çš„ä¿¡å·ã€‚ ä½†æ˜¯ï¼Œæ€»æœ‰ä¾‹å¤–ã€‚æœ‰äº›æ ‘ï¼ˆlinux-next是一个典型的例å)由于它们的需è¦ç»å¸¸ å˜åŸºï¼Œå¼€å‘人员知é“ä¸è¦åŸºäºŽå®ƒä»¬æ¥å·¥ä½œã€‚å¼€å‘人员有时会公开一个ä¸ç¨³å®šçš„分支, 供其他人或自动测试æœåŠ¡è¿›è¡Œæµ‹è¯•ã€‚如果您确实以这ç§æ–¹å¼å…¬å¼€äº†ä¸€ä¸ªå¯èƒ½ä¸ç¨³å®š 的分支,请确ä¿æ½œåœ¨ä½¿ç”¨è€…知é“ä¸è¦åŸºäºŽå®ƒæ¥å·¥ä½œã€‚ - ä¸è¦åœ¨åŒ…å«ç”±ä»–人创建的历å²çš„分支上å˜åŸºã€‚å¦‚æžœä½ ä»Žåˆ«çš„å¼€å‘者的仓库拉å–了å˜æ›´ï¼Œ é‚£ä½ çŽ°åœ¨å°±æˆäº†ä»–们历å²è®°å½•çš„ä¿ç®¡äººã€‚ä½ ä¸åº”该改å˜å®ƒï¼Œé™¤äº†å°‘数例外情况。例如 æ ‘ä¸æœ‰é—®é¢˜çš„æ交必须显å¼æ¢å¤ï¼ˆå³é€šè¿‡å¦ä¸€ä¸ªè¡¥ä¸ä¿®å¤ï¼‰ï¼Œè€Œä¸æ˜¯é€šè¿‡ä¿®æ”¹åŽ†å²è€Œ 消失。 - 没有åˆç†ç†ç”±ï¼Œä¸è¦å¯¹æ ‘å˜æ ¹ã€‚仅为了切æ¢åˆ°æ›´æ–°çš„基或é¿å…与上游储å˜åº“çš„åˆå¹¶ 通常ä¸æ˜¯åˆç†ç†ç”±ã€‚ - å¦‚æžœä½ å¿…é¡»å¯¹å‚¨å˜åº“进行å˜æ ¹ï¼Œè¯·ä¸è¦éšæœºé€‰å–一个æ交作为新基。在å‘布节点之间 å†…æ ¸é€šå¸¸å¤„äºŽä¸€ä¸ªç›¸å¯¹ä¸ç¨³å®šçš„状æ€ï¼›åŸºäºŽå…¶ä¸æŸç‚¹è¿›è¡Œå¼€å‘ä¼šå¢žåŠ é‡åˆ°æ„外错误的 å‡ çŽ‡ã€‚å½“ä¸€ç³»åˆ—è¡¥ä¸å¿…须移动到新基时,请选择移动到一个稳定节点(例如-rc版本 节点)。 - 请知悉对补ä¸ç³»åˆ—进行å˜æ ¹ï¼ˆæˆ–åšæ˜Žæ˜¾çš„历å²ä¿®æ”¹ï¼‰ä¼šæ”¹å˜å®ƒä»¬çš„å¼€å‘环境,且很 å¯èƒ½ä½¿åšè¿‡çš„大部分测试失效。一般æ¥è¯´ï¼Œå˜åŸºåŽçš„è¡¥ä¸ç³»åˆ—应当åƒæ–°ä»£ç ä¸€æ ·å¯¹ 待,并é‡æ–°æµ‹è¯•ã€‚ åˆå¹¶çª—å£éº»çƒ¦çš„一个常è§åŽŸå› 是,Linus收到了一个明显在拉å–请求å‘é€ä¹‹å‰ä¸ä¹…æ‰å˜æ ¹ (通常是å˜æ ¹åˆ°éšæœºçš„æ交上)的补ä¸ç³»åˆ—ã€‚è¿™æ ·ä¸€ä¸ªç³»åˆ—è¢«å……åˆ†æµ‹è¯•çš„å¯èƒ½æ€§ç›¸å¯¹è¾ƒ 低,拉å–请求被接å—çš„å‡ çŽ‡ä¹ŸåŒæ ·è¾ƒä½Žã€‚ 相å,如果å˜åŸºä»…é™äºŽç§æœ‰æ ‘ã€æ交基于一个通用的起点ã€ä¸”ç»è¿‡å……分测试,则引起 麻烦的å¯èƒ½æ€§å°±å¾ˆä½Žã€‚ åˆå¹¶ ==== å†…æ ¸å¼€å‘过程ä¸ï¼Œåˆå¹¶æ˜¯ä¸€ä¸ªå¾ˆå¸¸è§çš„æ“作;5.1版本开å‘周期ä¸æœ‰è¶…过1126个åˆå¹¶ ——差ä¸å¤šå 了整体的9%ã€‚å†…æ ¸å¼€å‘工作积累在100多个ä¸åŒçš„åç³»ç»Ÿæ ‘ä¸ï¼Œæ¯ä¸ª åç³»ç»Ÿæ ‘éƒ½å¯èƒ½åŒ…å«å¤šä¸ªä¸»é¢˜åˆ†æ”¯ï¼›æ¯ä¸ªåˆ†æ”¯é€šå¸¸ç‹¬ç«‹äºŽå…¶ä»–分支进行开å‘ã€‚å› æ¤ åœ¨ä»»ä½•ç»™å®šåˆ†æ”¯è¿›å…¥ä¸Šæ¸¸å‚¨å˜åº“之å‰ï¼Œè‡³å°‘需è¦ä¸€æ¬¡åˆå¹¶ã€‚ 许多项目è¦æ±‚拉å–请求ä¸çš„分支基于当å‰ä¸»å¹²ï¼Œè¿™æ ·åŽ†å²è®°å½•ä¸å°±ä¸ä¼šå‡ºçŽ°åˆå¹¶æ交。 å†…æ ¸å¹¶ä¸æ˜¯è¿™æ ·ï¼›ä»»ä½•ä¸ºäº†é¿å…åˆå¹¶è€Œé‡æ–°å¯¹åˆ†æ”¯å˜åŸºéƒ½å¾ˆå¯èƒ½å¯¼è‡´éº»çƒ¦ã€‚ å系统维护人员å‘现他们必须进行两ç§ç±»åž‹çš„åˆå¹¶ï¼šä»Žè¾ƒä½Žå±‚级的åç³»ç»Ÿæ ‘å’Œä»Žå…¶ä»– åç³»ç»Ÿæ ‘ï¼ˆåŒçº§æ ‘或主线)进行åˆå¹¶ã€‚这两ç§æƒ…况下è¦éµå¾ªçš„最佳实践是ä¸åŒçš„。 åˆå¹¶è¾ƒä½Žå±‚çº§æ ‘ -------------- 较大的å系统往往有多个级别的维护人员,较低级别的维护人员å‘较高级别å‘é€æ‹‰å– 请求。åˆå¹¶è¿™æ ·çš„è¯·æ±‚æ‰§è¡Œå‡ ä¹Žè‚¯å®šä¼šç”Ÿæˆä¸€ä¸ªåˆå¹¶æ交;这也是应该的。实际上, å系统维护人员å¯èƒ½å¸Œæœ›åœ¨æžå°‘æ•°å¿«è¿›åˆå¹¶æƒ…况下使用 ``-–no-ff`` æ ‡å¿—æ¥å¼ºåˆ¶æ·»åŠ åˆå¹¶æ交,以便记录åˆå¹¶çš„åŽŸå› ã€‚ **任何** 类型的åˆå¹¶çš„å˜æ›´æ—¥å¿—必须说明 *为什么* åˆå¹¶ã€‚å¯¹äºŽè¾ƒä½Žçº§åˆ«çš„æ ‘ï¼Œâ€œä¸ºä»€ä¹ˆâ€é€šå¸¸æ˜¯å¯¹è¯¥å–所带æ¥çš„å˜åŒ–的总结。 å„级维护人员都应在他们的拉å–请求上使用ç»ç¾åçš„æ ‡ç¾ï¼Œä¸Šæ¸¸ç»´æŠ¤äººå‘˜åº”在拉å–分支 时验è¯æ ‡ç¾ã€‚ä¸è¿™æ ·åšä¼šå¨èƒæ•´ä¸ªå¼€å‘过程的安全。 æ ¹æ®ä¸Šé¢åˆ—出的规则,一旦您将其他人的历å²è®°å½•åˆå¹¶åˆ°æ ‘ä¸ï¼Œæ‚¨å°±ä¸å¾—对该分支进行 å˜åŸºï¼Œå³ä½¿æ‚¨èƒ½å¤Ÿè¿™æ ·åšã€‚ åˆå¹¶åŒçº§æ ‘æˆ–ä¸Šæ¸¸æ ‘ ------------------ 虽然æ¥è‡ªä¸‹æ¸¸çš„åˆå¹¶æ˜¯å¸¸è§ä¸”ä¸èµ·çœ¼çš„,但当需è¦å°†ä¸€ä¸ªåˆ†æ”¯æŽ¨å‘上游时,其ä¸æ¥è‡ª å…¶ä»–æ ‘çš„åˆå¹¶å¾€å¾€æ˜¯ä¸€ä¸ªå±é™©ä¿¡å·ã€‚è¿™ç§åˆå¹¶éœ€è¦ä»”ç»†è€ƒè™‘å¹¶åŠ ä»¥å……åˆ†è¯æ˜Žï¼Œå¦åˆ™åŽç» 的拉å–请求很å¯èƒ½ä¼šè¢«æ‹’ç»ã€‚ 想è¦å°†ä¸»åˆ†æ”¯åˆå¹¶åˆ°å˜å‚¨åº“ä¸æ˜¯å¾ˆè‡ªç„¶çš„;这ç§ç±»åž‹çš„åˆå¹¶é€šå¸¸è¢«ç§°ä¸ºâ€œåå‘åˆå¹¶â€ 。åå‘åˆå¹¶æœ‰åŠ©äºŽç¡®ä¿ä¸Žå¹¶è¡Œçš„å¼€å‘没有冲çªï¼Œå¹¶ä¸”通常会给人一ç§æ¸©æš–ã€èˆ’æœçš„ 感觉,å³å¤„于最新。但这ç§è¯±æƒ‘å‡ ä¹Žæ€»æ˜¯åº”è¯¥é¿å…的。 为什么呢?åå‘åˆå¹¶å°†æ…ä¹±ä½ è‡ªå·±åˆ†æ”¯çš„å¼€å‘历å²ã€‚å®ƒä»¬ä¼šå¤§å¤§å¢žåŠ ä½ é‡åˆ°æ¥è‡ªç¤¾åŒº å…¶ä»–åœ°æ–¹çš„é”™è¯¯çš„æœºä¼šï¼Œä¸”ä½¿ä½ å¾ˆéš¾ç¡®ä¿ä½ 所管ç†çš„工作稳定并准备好åˆå…¥ä¸Šæ¸¸ã€‚ 频ç¹çš„åˆå¹¶è¿˜å¯ä»¥æŽ©ç›–æ ‘ä¸å¼€å‘过程ä¸çš„问题;它们会éšè—ä¸Žå…¶ä»–æ ‘çš„äº¤äº’ï¼Œè€Œè¿™äº› 交互ä¸åº”该(ç»å¸¸ï¼‰å‘生在管ç†è‰¯å¥½çš„分支ä¸ã€‚ 也就是说,å¶å°”需è¦è¿›è¡Œåå‘åˆå¹¶ï¼›å½“è¿™ç§æƒ…况å‘生时,一定è¦åœ¨æ交信æ¯ä¸è®°å½• *为什么* 。åŒæ ·ï¼Œåœ¨ä¸€ä¸ªä¼—所周知的稳定点进行åˆå¹¶ï¼Œè€Œä¸æ˜¯éšæœºæ交。å³ä½¿è¿™æ ·ï¼Œ ä½ ä¹Ÿä¸åº”该åå‘åˆå¹¶ä¸€æ£µæ¯”ä½ çš„ç›´æŽ¥ä¸Šæ¸¸æ ‘æ›´é«˜å±‚çº§çš„æ ‘ï¼›å¦‚æžœç¡®å®žéœ€è¦æ›´é«˜çº§åˆ«çš„ åå‘åˆå¹¶ï¼Œåº”é¦–å…ˆåœ¨ä¸Šæ¸¸æ ‘è¿›è¡Œã€‚ 导致åˆå¹¶ç›¸å…³é—®é¢˜æœ€å¸¸è§çš„åŽŸå› ä¹‹ä¸€æ˜¯ï¼šåœ¨å‘é€æ‹‰å–请求之å‰ç»´æŠ¤è€…åˆå¹¶ä¸Šæ¸¸ä»¥è§£å†³ åˆå¹¶å†²çªã€‚åŒæ ·ï¼Œè¿™ç§è¯±æƒ‘很容易ç†è§£ï¼Œä½†ç»å¯¹åº”该é¿å…。对于最终拉å–请求æ¥è¯´ 尤其如æ¤ï¼šLinusåšä¿¡ä»–æ›´æ„¿æ„看到åˆå¹¶å†²çªï¼Œè€Œä¸æ˜¯ä¸å¿…è¦çš„åå‘åˆå¹¶ã€‚çœ‹åˆ°å†²çª å¯ä»¥è®©ä»–了解潜在的问题所在。他åšè¿‡å¾ˆå¤šåˆå¹¶ï¼ˆåœ¨5.1版本开å‘周期ä¸æ˜¯382次), 而且在解决冲çªæ–¹é¢ä¹Ÿå¾ˆåœ¨è¡Œâ€”—通常比å‚与的开å‘人员è¦å¼ºã€‚ 那么,当他们的å系统分支和主线之间å‘生冲çªæ—¶ï¼Œç»´æŠ¤äººå‘˜åº”该怎么åšå‘¢ï¼Ÿæœ€é‡è¦ 的一æ¥æ˜¯åœ¨æ‹‰å–请求ä¸æ示Linus会å‘生冲çªï¼›å¦‚果啥都没说则表明您的分支å¯ä»¥æ£å¸¸ åˆå…¥ã€‚对于特别困难的冲çªï¼Œåˆ›å»ºå¹¶æŽ¨é€ä¸€ä¸ª *独立* 分支æ¥å±•ç¤ºä½ 将如何解决问题。 在拉å–请求ä¸æ到该分支,但是请求本身应该针对未åˆå¹¶çš„分支。 å³ä½¿ä¸å˜åœ¨å·²çŸ¥å†²çªï¼Œåœ¨å‘é€æ‹‰å–请求之å‰è¿›è¡Œåˆå¹¶æµ‹è¯•ä¹Ÿæ˜¯ä¸ªå¥½ä¸»æ„。它å¯èƒ½ä¼šæ醒 您一些在linux-nextæ ‘ä¸æ²¡æœ‰å‘现的问题,并帮助您准确地ç†è§£æ‚¨æ£åœ¨è¦æ±‚上游åšä»€ä¹ˆã€‚ åˆå¹¶ä¸Šæ¸¸æ ‘或å¦ä¸€ä¸ªåç³»ç»Ÿæ ‘çš„å¦ä¸€ä¸ªåŽŸå› 是解决ä¾èµ–关系。这些ä¾èµ–性问题有时确实 会å‘生,而且有时与å¦ä¸€æ£µæ ‘交å‰åˆå¹¶æ˜¯è§£å†³è¿™äº›é—®é¢˜çš„最佳方法;åŒæ ·ï¼Œåœ¨è¿™ç§æƒ…况 下,åˆå¹¶æ交应该解释为什么è¦è¿›è¡Œåˆå¹¶ã€‚花点时间把它åšå¥½ï¼›ä¼šæœ‰äººé˜…读这些å˜æ›´ 日志。 然而ä¾èµ–性问题通常表明需è¦æ”¹å˜æ–¹æ³•ã€‚åˆå¹¶å¦ä¸€ä¸ªåç³»ç»Ÿæ ‘ä»¥è§£å†³ä¾èµ–æ€§é£Žé™©ä¼šå¸¦æ¥ å…¶ä»–ç¼ºé™·ï¼Œå‡ ä¹Žæ°¸è¿œä¸åº”è¿™æ ·åšã€‚如果该åç³»ç»Ÿæ ‘æ— æ³•è¢«åˆåˆ°ä¸Šæ¸¸ï¼Œé‚£ä¹ˆå®ƒçš„任何问题 也都会阻ç¢ä½ çš„æ ‘åˆå¹¶ã€‚æ›´å¯å–的选择包括与维护人员达æˆä¸€è‡´æ„è§ï¼Œåœ¨å…¶ä¸ä¸€ä¸ªæ ‘ä¸ åŒæ—¶è¿›è¡Œä¸¤ç»„更改;或者创建一个主题分支专门处ç†å¯ä»¥åˆå¹¶åˆ°ä¸¤ä¸ªæ ‘ä¸çš„先决æ¡ä»¶æ交。 如果ä¾èµ–关系与主è¦çš„基础结构更改相关,æ£ç¡®çš„解决方案å¯èƒ½æ˜¯å°†ä¾èµ–æ交ä¿ç•™ä¸€ä¸ª å¼€å‘周期,以便这些更改有时间在主线上稳定。 æœ€åŽ ==== 在开å‘周期的开头åˆå¹¶ä¸»çº¿æ˜¯æ¯”较常è§çš„,å¯ä»¥èŽ·å–æ ‘ä¸å…¶ä»–地方的更改和修å¤ã€‚åŒæ ·ï¼Œ è¿™æ ·çš„åˆå¹¶åº”该选择一个众所周知的å‘布点,而ä¸æ˜¯ä¸€äº›éšæœºç‚¹ã€‚如果在åˆå¹¶çª—å£æœŸé—´ 上游分支已完全清空到主线ä¸ï¼Œåˆ™å¯ä»¥ä½¿ç”¨ä»¥ä¸‹å‘½ä»¤å‘å‰æ‹‰å–它:: git merge v5.2-rc1^0 “^0â€ä½¿Git执行快进åˆå¹¶ï¼ˆåœ¨è¿™ç§æƒ…况下这应该å¯ä»¥ï¼‰ï¼Œä»Žè€Œé¿å…多余的虚å‡åˆå¹¶æ交。 上é¢åˆ—出的就是指导方针了。总是会有一些情况需è¦ä¸åŒçš„解决方案,这些指导原则 ä¸åº”阻æ¢å¼€å‘人员在需è¦æ—¶åšæ£ç¡®çš„事情。但是,我们应该时刻考虑是å¦çœŸçš„出现了 è¿™æ ·çš„éœ€æ±‚ï¼Œå¹¶å‡†å¤‡å¥½è§£é‡Šä¸ºä»€ä¹ˆéœ€è¦åšä¸€äº›ä¸å¯»å¸¸çš„事情。