CINXE.COM
Git - git-rebase Documentation
<!DOCTYPE html> <html lang="fr"> <head> <script type="text/javascript"> const currentTheme = localStorage.getItem("theme") if (currentTheme) { const prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)").matches if ((prefersDarkScheme && currentTheme === "light") || (!prefersDarkScheme && currentTheme === "dark")) { document.documentElement.dataset.theme = currentTheme } } </script> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Git - git-rebase Documentation</title> <link href="/favicon.ico" rel='shortcut icon' type='image/x-icon'> <link rel="stylesheet" href="/application.min.css"> </head> <body id="documentation"> <div class="inner"> <header> <a id="logo" href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" class="no-filter" /></a> <span id="tagline"></span> <script type="text/javascript"> const taglines = [ "fast-version-control", "everything-is-local", "distributed-even-if-your-workflow-isnt", "local-branching-on-the-cheap", "distributed-is-the-new-centralized" ]; var tagline = taglines[Math.floor(Math.random() * taglines.length)]; document.getElementById('tagline').innerHTML = '--' + tagline; </script> <div id="search-container"> <form id="search" action="/search/results"> <input id="search-text" name="search" placeholder="Type / to search entire site…" autocomplete="off" type="text" /> </form> <div id="search-results"></div> </div> <img src="/images/dark-mode.svg" id="dark-mode-button" /> </header> </div> <div class="inner"> <div id="content-wrapper"> <div tabindex="1" class="sidebar-btn"></div> <aside class="sidebar" id="sidebar"> <nav> <ul> <li> <a href="/about">About</a> <ul> </ul> </li> <li> <a href="/doc" class="active">Documentation</a> <ul class="expanded"> <li> <a href="/docs" class="active">Reference</a> </li> <li> <a href="/book">Book</a> </li> <li> <a href="/videos">Videos</a> </li> <li> <a href="/doc/ext">External Links</a> </li> </ul> </li> <li> <a href="/downloads">Downloads</a> <ul > <li> <a href="/downloads/guis">GUI Clients</a> </li> <li> <a href="/downloads/logos">Logos</a> </li> </ul> </li> <li> <a href="/community">Community</a> </li> </ul> </nav> </aside> <div id="content"> <div id='reference-version'> <a class="dropdown-trigger" id="reference-languages-trigger" data-panel-id="l10n-versions-dropdown" href="#"> Français ▾</a> <div class='dropdown-panel right' id='l10n-versions-dropdown'> <header>Localized versions of <strong>git-rebase</strong> manual</header> <ol class='reference-previous-versions'> <li> <a href="/docs/git-rebase"><span class="version">English</span> </a> </li> <li> <a href="/docs/git-rebase/fr"><span class="version">Français</span> </a> </li> <li> <a href="/docs/git-rebase/pt_BR"><span class="version">Português (Brasil)</span> </a> </li> <li> <a href="/docs/git-rebase/zh_HANS-CN"><span class="version">简体中文</span> </a> </li> </ol> <footer> Want to read in your language or fix typos?<br/> <a href="https://github.com/jnavila/git-manpages-l10n">You can help translate this page</a>. </footer> </div> <a class="dropdown-trigger" id="reference-topics-trigger" data-panel-id="topics-dropdown" href="#">Topics ▾</a> <div class='dropdown-panel right' id='topics-dropdown'> <div class='three-column'> <div class='column-left'> <h3 class='setup'>Setup and Config</h3> <ul class='unstyled'> <li> <a href="/docs/git/fr"> git </a> </li> <li> <a href="/docs/git-config/fr"> config </a> </li> <li> <a href="/docs/git-help/fr"> help </a> </li> <li> <a href="/docs/git-bugreport/fr"> bugreport </a> </li> <li> <a href="/doc/credential-helpers"> Credential helpers </a> </li> </ul> <h3 class='projects'>Getting and Creating Projects</h3> <ul class='unstyled'> <li> <a href="/docs/git-init/fr"> init </a> </li> <li> <a href="/docs/git-clone/fr"> clone </a> </li> </ul> <h3 class='snapshotting'>Basic Snapshotting</h3> <ul class='unstyled'> <li> <a href="/docs/git-add/fr"> add </a> </li> <li> <a href="/docs/git-status/fr"> status </a> </li> <li> <a href="/docs/git-diff/fr"> diff </a> </li> <li> <a href="/docs/git-commit/fr"> commit </a> </li> <li> <a href="/docs/git-notes/fr"> notes </a> </li> <li> <a href="/docs/git-restore/fr"> restore </a> </li> <li> <a href="/docs/git-reset/fr"> reset </a> </li> <li> <a href="/docs/git-rm/fr"> rm </a> </li> <li> <a href="/docs/git-mv/fr"> mv </a> </li> </ul> <h3 class='branching'>Branching and Merging</h3> <ul class='unstyled'> <li> <a href="/docs/git-branch/fr"> branch </a> </li> <li> <a href="/docs/git-checkout/fr"> checkout </a> </li> <li> <a href="/docs/git-switch/fr"> switch </a> </li> <li> <a href="/docs/git-merge/fr"> merge </a> </li> <li> <a href="/docs/git-mergetool/fr"> mergetool </a> </li> <li> <a href="/docs/git-log/fr"> log </a> </li> <li> <a href="/docs/git-stash/fr"> stash </a> </li> <li> <a href="/docs/git-tag/fr"> tag </a> </li> <li> <a href="/docs/git-worktree/fr"> worktree </a> </li> </ul> <h3 class='sharing'>Sharing and Updating Projects</h3> <ul class='unstyled'> <li> <a href="/docs/git-fetch/fr"> fetch </a> </li> <li> <a href="/docs/git-pull/fr"> pull </a> </li> <li> <a href="/docs/git-push/fr"> push </a> </li> <li> <a href="/docs/git-remote/fr"> remote </a> </li> <li> <a href="/docs/git-submodule/fr"> submodule </a> </li> </ul> </div> <div class='column-middle'> <h3 class='inspection'>Inspection and Comparison</h3> <ul class='unstyled'> <li> <a href="/docs/git-show/fr"> show </a> </li> <li> <a href="/docs/git-log/fr"> log </a> </li> <li> <a href="/docs/git-diff/fr"> diff </a> </li> <li> <a href="/docs/git-difftool/fr"> difftool </a> </li> <li> <a href="/docs/git-range-diff/fr"> range-diff </a> </li> <li> <a href="/docs/git-shortlog/fr"> shortlog </a> </li> <li> <a href="/docs/git-describe/fr"> describe </a> </li> </ul> <h3 class='patching'>Patching</h3> <ul class='unstyled'> <li> <a href="/docs/git-apply/fr"> apply </a> </li> <li> <a href="/docs/git-cherry-pick/fr"> cherry-pick </a> </li> <li> <a href="/docs/git-diff/fr"> diff </a> </li> <li> <a href="/docs/git-rebase/fr"> rebase </a> </li> <li> <a href="/docs/git-revert/fr"> revert </a> </li> </ul> <h3 class='debugging'>Debugging</h3> <ul class='unstyled'> <li> <a href="/docs/git-bisect/fr"> bisect </a> </li> <li> <a href="/docs/git-blame/fr"> blame </a> </li> <li> <a href="/docs/git-grep/fr"> grep </a> </li> </ul> <h3 class='email'>Email</h3> <ul class='unstyled'> <li> <a href="/docs/git-am/fr"> am </a> </li> <li> <a href="/docs/git-apply/fr"> apply </a> </li> <li> <a href="/docs/git-format-patch/fr"> format-patch </a> </li> <li> <a href="/docs/git-send-email"> send-email </a> </li> <li> <a href="/docs/git-request-pull/fr"> request-pull </a> </li> </ul> <h3 class='external'>External Systems</h3> <ul class='unstyled'> <li> <a href="/docs/git-svn"> svn </a> </li> <li> <a href="/docs/git-fast-import/fr"> fast-import </a> </li> </ul> <h3 class='server-admin'>Server Admin</h3> <ul class='unstyled'> <li> <a href="/docs/git-daemon/fr"> daemon </a> </li> <li> <a href="/docs/git-update-server-info"> update-server-info </a> </li> </ul> </div> <div class='column-right'> <h3 class='guides'>Guides</h3> <ul class='unstyled'> <li> <a href="/docs/gitattributes"> gitattributes </a> </li> <li> <a href="/docs/gitcli"> Command-line interface conventions </a> </li> <li> <a href="/docs/giteveryday"> Everyday Git </a> </li> <li> <a href="/docs/gitfaq"> Frequently Asked Questions (FAQ) </a> </li> <li> <a href="/docs/gitglossary/fr"> Glossary </a> </li> <li> <a href="/docs/githooks"> Hooks </a> </li> <li> <a href="/docs/gitignore/fr"> gitignore </a> </li> <li> <a href="/docs/gitmodules"> gitmodules </a> </li> <li> <a href="/docs/gitrevisions"> Revisions </a> </li> <li> <a href="/docs/gitsubmodules"> Submodules </a> </li> <li> <a href="/docs/gittutorial"> Tutorial </a> </li> <li> <a href="/docs/gitworkflows"> Workflows </a> </li> <li> <a href="/docs/git#_guides"> All guides... </a> </li> </ul> <h3 class='admin'>Administration</h3> <ul class='unstyled'> <li> <a href="/docs/git-clean/fr"> clean </a> </li> <li> <a href="/docs/git-gc/fr"> gc </a> </li> <li> <a href="/docs/git-fsck/fr"> fsck </a> </li> <li> <a href="/docs/git-reflog/fr"> reflog </a> </li> <li> <a href="/docs/git-filter-branch"> filter-branch </a> </li> <li> <a href="/docs/git-instaweb/fr"> instaweb </a> </li> <li> <a href="/docs/git-archive/fr"> archive </a> </li> <li> <a href="/docs/git-bundle/fr"> bundle </a> </li> </ul> <h3 class='plumbing'>Plumbing Commands</h3> <ul class='unstyled'> <li> <a href="/docs/git-cat-file/fr"> cat-file </a> </li> <li> <a href="/docs/git-check-ignore/fr"> check-ignore </a> </li> <li> <a href="/docs/git-checkout-index/fr"> checkout-index </a> </li> <li> <a href="/docs/git-commit-tree/fr"> commit-tree </a> </li> <li> <a href="/docs/git-count-objects/fr"> count-objects </a> </li> <li> <a href="/docs/git-diff-index"> diff-index </a> </li> <li> <a href="/docs/git-for-each-ref"> for-each-ref </a> </li> <li> <a href="/docs/git-hash-object"> hash-object </a> </li> <li> <a href="/docs/git-ls-files"> ls-files </a> </li> <li> <a href="/docs/git-ls-tree"> ls-tree </a> </li> <li> <a href="/docs/git-merge-base"> merge-base </a> </li> <li> <a href="/docs/git-read-tree"> read-tree </a> </li> <li> <a href="/docs/git-rev-list/fr"> rev-list </a> </li> <li> <a href="/docs/git-rev-parse"> rev-parse </a> </li> <li> <a href="/docs/git-show-ref"> show-ref </a> </li> <li> <a href="/docs/git-symbolic-ref"> symbolic-ref </a> </li> <li> <a href="/docs/git-update-index"> update-index </a> </li> <li> <a href="/docs/git-update-ref"> update-ref </a> </li> <li> <a href="/docs/git-verify-pack"> verify-pack </a> </li> <li> <a href="/docs/git-write-tree"> write-tree </a> </li> </ul> </div> </div> </div> <a class="dropdown-trigger" id="reference-versions-trigger" data-panel-id="previous-versions-dropdown" href="#"> Latest version ▾ </a> <span class="light d-flex">git-rebase last updated in 2.49.0</span> <div class='dropdown-panel left' id='previous-versions-dropdown'> <header>Changes in the <strong>git-rebase</strong> manual</header> <ol class='reference-previous-versions'> <li> <a href="/docs/git-rebase/2.49.0"><span class="version">2.49.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2025-03-14</em> </a> </li> <li class="no-change"><span>2.46.2 → 2.48.1 no changes</span></li> <li> <a href="/docs/git-rebase/2.46.1"><span class="version">2.46.1</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2024-09-13</em> </a> </li> <li class="no-change"><span>2.45.1 → 2.46.0 no changes</span></li> <li> <a href="/docs/git-rebase/2.45.0"><span class="version">2.45.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2024-04-29</em> </a> </li> <li class="no-change"><span>2.44.1 → 2.44.3 no changes</span></li> <li> <a href="/docs/git-rebase/2.44.0"><span class="version">2.44.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2024-02-23</em> </a> </li> <li class="no-change"><span>2.43.3 → 2.43.6 no changes</span></li> <li> <a href="/docs/git-rebase/2.43.2"><span class="version">2.43.2</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2024-02-13</em> </a> </li> <li> <a href="/docs/git-rebase/2.43.1"><span class="version">2.43.1</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2024-02-09</em> </a> </li> <li> <a href="/docs/git-rebase/2.43.0"><span class="version">2.43.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2023-11-20</em> </a> </li> <li class="no-change"><span>2.42.2 → 2.42.4 no changes</span></li> <li> <a href="/docs/git-rebase/2.42.1"><span class="version">2.42.1</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2023-11-02</em> </a> </li> <li class="no-change"><span>2.41.1 → 2.42.0 no changes</span></li> <li> <a href="/docs/git-rebase/2.41.0"><span class="version">2.41.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2023-06-01</em> </a> </li> <li class="no-change"><span>2.40.1 → 2.40.4 no changes</span></li> <li> <a href="/docs/git-rebase/2.40.0"><span class="version">2.40.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2023-03-12</em> </a> </li> <li class="no-change"><span>2.39.4 → 2.39.5 no changes</span></li> <li> <a href="/docs/git-rebase/2.39.3"><span class="version">2.39.3</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2023-04-17</em> </a> </li> <li class="no-change"><span>2.39.1 → 2.39.2 no changes</span></li> <li> <a href="/docs/git-rebase/2.39.0"><span class="version">2.39.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2022-12-12</em> </a> </li> <li class="no-change"><span>2.38.1 → 2.38.5 no changes</span></li> <li> <a href="/docs/git-rebase/2.38.0"><span class="version">2.38.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2022-10-02</em> </a> </li> <li class="no-change"><span>2.37.3 → 2.37.7 no changes</span></li> <li> <a href="/docs/git-rebase/2.37.2"><span class="version">2.37.2</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2022-08-11</em> </a> </li> <li class="no-change"><span>2.36.3 → 2.37.1 no changes</span></li> <li> <a href="/docs/git-rebase/2.36.2"><span class="version">2.36.2</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2022-06-23</em> </a> </li> <li class="no-change"><span>2.35.1 → 2.36.1 no changes</span></li> <li> <a href="/docs/git-rebase/2.35.0"><span class="version">2.35.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2022-01-24</em> </a> </li> <li class="no-change"><span>2.34.1 → 2.34.8 no changes</span></li> <li> <a href="/docs/git-rebase/2.34.0"><span class="version">2.34.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2021-11-15</em> </a> </li> <li class="no-change"><span>2.33.2 → 2.33.8 no changes</span></li> <li> <a href="/docs/git-rebase/2.33.1"><span class="version">2.33.1</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2021-10-12</em> </a> </li> <li class="no-change"><span>2.32.1 → 2.33.0 no changes</span></li> <li> <a href="/docs/git-rebase/2.32.0"><span class="version">2.32.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2021-06-06</em> </a> </li> <li class="no-change"><span>2.31.1 → 2.31.8 no changes</span></li> <li> <a href="/docs/git-rebase/2.31.0"><span class="version">2.31.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2021-03-15</em> </a> </li> <li class="no-change"><span>2.30.1 → 2.30.9 no changes</span></li> <li> <a href="/docs/git-rebase/2.30.0"><span class="version">2.30.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2020-12-27</em> </a> </li> <li class="no-change"><span>2.29.1 → 2.29.3 no changes</span></li> <li> <a href="/docs/git-rebase/2.29.0"><span class="version">2.29.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2020-10-19</em> </a> </li> <li class="no-change"><span>2.28.1 no changes</span></li> <li> <a href="/docs/git-rebase/2.28.0"><span class="version">2.28.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2020-07-27</em> </a> </li> <li class="no-change"><span>2.27.1 no changes</span></li> <li> <a href="/docs/git-rebase/2.27.0"><span class="version">2.27.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2020-06-01</em> </a> </li> <li class="no-change"><span>2.26.1 → 2.26.3 no changes</span></li> <li> <a href="/docs/git-rebase/2.26.0"><span class="version">2.26.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2020-03-22</em> </a> </li> <li class="no-change"><span>2.25.1 → 2.25.5 no changes</span></li> <li> <a href="/docs/git-rebase/2.25.0"><span class="version">2.25.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2020-01-13</em> </a> </li> <li class="no-change"><span>2.24.1 → 2.24.4 no changes</span></li> <li> <a href="/docs/git-rebase/2.24.0"><span class="version">2.24.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2019-11-04</em> </a> </li> <li class="no-change"><span>2.23.1 → 2.23.4 no changes</span></li> <li> <a href="/docs/git-rebase/2.23.0"><span class="version">2.23.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2019-08-16</em> </a> </li> <li class="no-change"><span>2.22.1 → 2.22.5 no changes</span></li> <li> <a href="/docs/git-rebase/2.22.0"><span class="version">2.22.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2019-06-07</em> </a> </li> <li class="no-change"><span>2.21.1 → 2.21.4 no changes</span></li> <li> <a href="/docs/git-rebase/2.21.0"><span class="version">2.21.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2019-02-24</em> </a> </li> <li class="no-change"><span>2.20.1 → 2.20.5 no changes</span></li> <li> <a href="/docs/git-rebase/2.20.0"><span class="version">2.20.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2018-12-09</em> </a> </li> <li class="no-change"><span>2.19.3 → 2.19.6 no changes</span></li> <li> <a href="/docs/git-rebase/2.19.2"><span class="version">2.19.2</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2018-11-21</em> </a> </li> <li class="no-change"><span>2.19.1 no changes</span></li> <li> <a href="/docs/git-rebase/2.19.0"><span class="version">2.19.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2018-09-10</em> </a> </li> <li class="no-change"><span>2.18.1 → 2.18.5 no changes</span></li> <li> <a href="/docs/git-rebase/2.18.0"><span class="version">2.18.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2018-06-21</em> </a> </li> <li class="no-change"><span>2.17.1 → 2.17.6 no changes</span></li> <li> <a href="/docs/git-rebase/2.17.0"><span class="version">2.17.0</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2018-04-02</em> </a> </li> <li> <a href="/docs/git-rebase/2.16.6"><span class="version">2.16.6</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2019-12-06</em> </a> </li> <li> <a href="/docs/git-rebase/2.15.4"><span class="version">2.15.4</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2019-12-06</em> </a> </li> <li> <a href="/docs/git-rebase/2.14.6"><span class="version">2.14.6</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2019-12-06</em> </a> </li> <li> <a href="/docs/git-rebase/2.13.7"><span class="version">2.13.7</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2018-05-22</em> </a> </li> <li> <a href="/docs/git-rebase/2.12.5"><span class="version">2.12.5</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2017-09-22</em> </a> </li> <li class="no-change"><span>2.10.5 → 2.11.4 no changes</span></li> <li> <a href="/docs/git-rebase/2.9.5"><span class="version">2.9.5</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2017-07-30</em> </a> </li> <li> <a href="/docs/git-rebase/2.8.6"><span class="version">2.8.6</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2017-07-30</em> </a> </li> <li class="no-change"><span>2.7.6 no changes</span></li> <li> <a href="/docs/git-rebase/2.6.7"><span class="version">2.6.7</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2017-05-05</em> </a> </li> <li class="no-change"><span>2.5.6 no changes</span></li> <li> <a href="/docs/git-rebase/2.4.12"><span class="version">2.4.12</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2017-05-05</em> </a> </li> <li> <a href="/docs/git-rebase/2.3.10"><span class="version">2.3.10</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2015-09-28</em> </a> </li> <li> <a href="/docs/git-rebase/2.2.3"><span class="version">2.2.3</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2015-09-04</em> </a> </li> <li> <a href="/docs/git-rebase/2.1.4"><span class="version">2.1.4</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2014-12-17</em> </a> </li> <li> <a href="/docs/git-rebase/2.0.5"><span class="version">2.0.5</span> <span class="diff"> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/green-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/red-dot.png" /> <img src="/images/icons/grey-dot.png" /> <img src="/images/icons/grey-dot.png" /> </span> <em class="date">2014-12-17</em> </a> </li> <li> </li> </ol> <footer> <p>Check your version of git by running</p> <code class="command">git --version</code> </footer> </div> </div> <div id="main" data-pagefind-filter="category:reference" data-pagefind-meta="category:Reference" data-pagefind-weight="0.05" data-pagefind-body> <div class="sect1"> <h2 id="_nom"><a class="anchor" href="#_nom"></a>NOM</h2> <div class="sectionbody"> <div class="paragraph"> <p>git-rebase - Réapplique des commits sur le sommet de l’autre base</p> </div> </div> </div> <div class="sect1"> <h2 id="_synopsis"><a class="anchor" href="#_synopsis"></a>SYNOPSIS</h2> <div class="sectionbody"> <div class="verseblock"> <pre class="content"><em>git rebase</em> [-i | --interactive] [<options>] [--exec <cmd>] [--onto <nouvellebase> | --keep-base] [<amont> [<branche>]] <em>git rebase</em> [-i | --interactive] [<options>] [--exec <cmd>] [--onto <nouvellebase>] --root [<branche>] <em>git rebase</em> (--continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)</pre> </div> </div> </div> <div class="sect1"> <h2 id="_description"><a class="anchor" href="#_description"></a>DESCRIPTION</h2> <div class="sectionbody"> <div class="paragraph"> <p>Si l ' on spécifie <code><branche> ` , `git rebase</code> effectuera un <code>git switch <branche></code> automatique avant de faire autre chose. Sinon, il reste sur la branche actuelle.</p> </div> <div class="paragraph"> <p>Si <code><amont></code> n’est pas spécifié, on utilisera l’amont configuré dans les options <code>branch.<nom>. remote</code> et <code>branch.<nom>.merge</code> (voir <a href='/docs/git-config/fr'>git-config[1]</a> pour plus de détails) et on suppose l’option <code>--fork-point</code>. Si vous n’êtes actuellement sur aucune branche ou si la branche actuelle n’a pas d’amont configuré, le rebasage échouera.</p> </div> <div class="paragraph"> <p>Tous les changements apportés par des commits dans la branche actuelle, mais qui ne sont pas dans <code><amont></code> sont enregistrés dans une zone temporaire. Il s’agit de la même série de commits qui serait affichée par <code>git log <amont>.HEAD</code> ; ou par <code>git log 'fork_point'.HEAD</code>, si <code>--fork-point</code> est actif (voir la description de <code>--fork-point</code> ci-dessous) ; ou par <code>git log HEAD</code> si l’option <code>--root</code> est spécifiée.</p> </div> <div class="paragraph"> <p>La branche actuelle est réinitialisée à <code><amont></code> ou <code><nouvellebase></code> si l’option <code>--onto</code> a été fournie. Cela a le même effet que <code>git reset --hard <amont></code> (ou <code><nouvellebase></code>). <code>ORIG_HEAD</code> est fixé pour pointer au sommet de la branche avant la réinitialisation.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> <code>ORIG_HEAD</code> n’est pas garanti de toujours pointer vers le sommet de la branche précédente à la fin du rebasage si d’autres commandes qui écrivent cette pseudo-réf (par exemple <code>git reset</code>) sont utilisées pendant le rebasage. La pointe de la branche précédente, cependant, est accessible en utilisant le reflog de la branche actuelle (i.e. <code>@{1}</code>, voir <a href='/docs/gitrevisions/fr'>gitrevisions[7]</a>). </td> </tr> </table> </div> <div class="paragraph"> <p>Les commits qui ont été précédemment sauvés dans la zone temporaire sont ensuite réappliqués à la branche actuelle, un par un, dans l’ordre. Notez que tout commit dans <code>HEAD</code> qui introduit les mêmes changements textuels que ceux d’un commit dans <code>HEAD..<amont></code> sont omis (c.-à-d. une rustine déjà acceptée en amont avec un autre message de validation ou un autre horodatage sera ignorée).</p> </div> <div class="paragraph"> <p>Il est possible qu’un échec de fusion empêche ce processus d’être complètement automatique. Vous devrez résoudre un tel échec de fusion et exécuter <code>git rebase --continue</code>. Une autre option est de contourner le commit qui a causé l’échec de fusion avec <code>git rebase --skip</code>. Pour extraire la <code><branche>`originale et supprimer les fichiers de travail de `.git/rebase-apply</code>, utilisez la commande <code>git rebase --abort</code> à la place.</p> </div> <div class="paragraph"> <p>Supposons que l’historique suivant existe et que la branche actuelle est "topic" :</p> </div> <div class="listingblock"> <div class="content"> <pre> A---B---C sujet / D---E---F---G master</pre> </div> </div> <div class="paragraph"> <p>À partir de là, le résultat de l’une des commandes suivantes :</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase master git rebase master sujet</pre> </div> </div> <div class="paragraph"> <p>serait :</p> </div> <div class="listingblock"> <div class="content"> <pre> A'--B'--C' sujet / D---E---F---G master</pre> </div> </div> <div class="paragraph"> <p><strong>NOTE:</strong> Cette dernière forme n’est qu’un raccourcis de`git checkout sujet` suivi par <code>git rebase master</code> . Lorsque rebase se termine, <code>sujet</code> restera à la branche extraite.</p> </div> <div class="paragraph"> <p>Si la branche amont contient déjà un changement que vous avez fait (par exemple, parce que vous avez envoyé une rustine qui a été appliquée en amont), alors ce commit sera ignoré et des avertissements seront émis (si le backend <em>merge</em> est utilisé). Par exemple, l’exécution de <code>git rebase master</code> sur l’historique suivant (dans lequel <code>A'</code> et <code>A</code> introduisent le même ensemble de modifications, mais ont des informations de validateur différentes) :</p> </div> <div class="listingblock"> <div class="content"> <pre> A---B---C sujet / D---E---A'---F master</pre> </div> </div> <div class="paragraph"> <p>donnera :</p> </div> <div class="listingblock"> <div class="content"> <pre> B'---C' sujet / D---E---A'---F master</pre> </div> </div> <div class="paragraph"> <p>Voici comment vous transplanteriez une branche de sujet basée sur une branche sur une autre, pour prétendre que vous avez fourché la branche de sujet de cette dernière branche, en utilisant <code>rebase --onto</code>.</p> </div> <div class="paragraph"> <p>D’abord supposons que votre <em>sujet</em> est basé sur la branche <em>next</em>. Par exemple, une fonctionnalité développée en <em>sujet</em> dépend de certaines fonctionnalités qui se trouvent dans <em>next</em>.</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o master \ o---o---o---o---o next \ o---o---o topic</pre> </div> </div> <div class="paragraph"> <p>Nous voulons rendre <em>sujet</em> embranchée depuis la branche <em>master</em>. ; par exemple, parce que la fonctionnalité sur laquelle <em>sujet</em> dépend a été fusionnée dans la branche <em>master</em> plus stable. Nous voulons que notre arbre ressemble à ça :</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o master | \ | o'--o'--o' sujet \ o---o---o---o---o next</pre> </div> </div> <div class="paragraph"> <p>Nous pouvons l’obtenir en utilisant la commande suivante :</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --onto master next sujet</pre> </div> </div> <div class="paragraph"> <p>Un autre exemple de l’option --onto est de rebaser une partie d’une branche. Si nous avons la situation suivante :</p> </div> <div class="listingblock"> <div class="content"> <pre> H---I---J sujetB / E---F---G sujetA / A---B---C---D master</pre> </div> </div> <div class="paragraph"> <p>puis la commande</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --onto master sujetA sujetB</pre> </div> </div> <div class="paragraph"> <p>aurait pour résultat :</p> </div> <div class="listingblock"> <div class="content"> <pre> H'--I'--J' sujetB / | E---F---G sujetA |/ A---B---C---D master</pre> </div> </div> <div class="paragraph"> <p>Ceci est utile lorsque le sujet B ne dépend pas du sujetA.</p> </div> <div class="paragraph"> <p>Une plage de commits pourrait également être supprimée avec rebase. Si nous avons la situation suivante :</p> </div> <div class="listingblock"> <div class="content"> <pre> E---F---G---H---I---J sujetA</pre> </div> </div> <div class="paragraph"> <p>puis la commande</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --onto sujetA~5 sujetA~3 sujetA</pre> </div> </div> <div class="paragraph"> <p>entraînerait le retrait des commits F et G :</p> </div> <div class="listingblock"> <div class="content"> <pre> E---H'---I'---J' sujetA</pre> </div> </div> <div class="paragraph"> <p>Ceci est utile si F et G ont été corrompues d’une certaine manière, ou ne devraient pas faire partie de sujetA. Notez que l’argument pour <code>--onto</code> et le paramètre <code><amont></code> peuvent être n’importe quel commit-esque valide.</p> </div> <div class="paragraph"> <p>En cas de conflit, <code>git rebase</code> s’arrêtera au premier commit problématique et laissera les marqueurs de conflit dans l’arbre. Vous pouvez utiliser <code>git diff</code> pour localiser les marqueurs (<<<<<<) et faire des modification pour résoudre le conflit. Pour chaque fichier que vous éditez, vous devez dire à Git que le conflit a été résolu, généralement cela serait fait avec</p> </div> <div class="literalblock"> <div class="content"> <pre>git add <fichier></pre> </div> </div> <div class="paragraph"> <p>Après avoir résolu le conflit manuellement et mis à jour l’index avec la résolution souhaitée, vous pouvez poursuivre le processus de rebasage avec</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --continue</pre> </div> </div> <div class="paragraph"> <p>Alternativement, vous pouvez défaire le <em>git rebase</em> avec</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --abort</pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="_options_de_mode"><a class="anchor" href="#_options_de_mode"></a>OPTIONS DE MODE</h2> <div class="sectionbody"> <div class="paragraph"> <p>Les options de cette section ne peuvent être utilisées avec aucune autre option, y compris pas les unes avec les autres :</p> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase---continue"> <a class="anchor" href="#git-rebase---continue"></a>--continue </dt> <dd> <p>Redémarrer le processus de rebasage après avoir résolu un conflit de fusion.</p> </dd> <dt class="hdlist1" id="git-rebase---skip"> <a class="anchor" href="#git-rebase---skip"></a>--skip </dt> <dd> <p>Redémarrer le processus de rebasage en sautant la rustine actuelle.</p> </dd> <dt class="hdlist1" id="git-rebase---abort"> <a class="anchor" href="#git-rebase---abort"></a>--abort </dt> <dd> <p>Abandonner l’opération de rebasage et réinitialiser HEAD à la branche originale. Si <code><branche></code> a été fournie quand l’opération de rebasage a été lancée, <code>HEAD</code> sera réinitialisée à <code><branche></code>. Sinon <code>HEAD</code> sera réinitialisée vers où elle était lorsque l’opération de rebasage a été lancée.</p> </dd> <dt class="hdlist1" id="git-rebase---quit"> <a class="anchor" href="#git-rebase---quit"></a>--quit </dt> <dd> <p>Abandonner l’opération de rebasage mais <code>HEAD</code> n’est pas réinitialisé à la branche d’origine. L’index et l’arbre de travail sont également laissés inchangés en conséquence. Si une entrée de remisage temporaire a été créée à l’aide de <code>--autostash</code> , elle sera sauvegardée sur la liste des remisages.</p> </dd> <dt class="hdlist1" id="git-rebase---edit-todo"> <a class="anchor" href="#git-rebase---edit-todo"></a>--edit-todo </dt> <dd> <p>Éditer la liste à faire lors d’un rebasage interactif.</p> </dd> <dt class="hdlist1" id="git-rebase---show-current-patch"> <a class="anchor" href="#git-rebase---show-current-patch"></a>--show-current-patch </dt> <dd> <p>Afficher la rustine actuelle dans une rebasage interactive ou lorsque le rebasage est arrêté en raison de conflits. C’est l’équivalent de <code>git show REBASE_HEAD</code>.</p> </dd> </dl> </div> </div> </div> <div class="sect1"> <h2 id="_options"><a class="anchor" href="#_options"></a>OPTIONS</h2> <div class="sectionbody"> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase---ontoltnouvellebasegt"> <a class="anchor" href="#git-rebase---ontoltnouvellebasegt"></a>--onto <nouvellebase> </dt> <dd> <p>Point de départ pour créer les nouveaux commits. Si l ' option <code>--onto</code> n’est pas spécifiée, le point de départ est <code><amont></code> . Peut être tout commit valide, et pas seulement un nom de branche existant.</p> <div class="paragraph"> <p>Autre cas spécial, vous pouvez utiliser « A...B » comme raccourci pour la base de fusion de <code>A</code> et <code>B</code> s’il y a exactement une seule base de fusion. Vous pouvez ne pas spécifier <code>A</code> ou <code>B</code>, auquel cas ce sera <code>HEAD</code> par défaut.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---keep-base"> <a class="anchor" href="#git-rebase---keep-base"></a>--keep-base </dt> <dd> <p>Définir le point de départ pour créer les nouveaux commits à la base de fusion de <code><amont></code> et <code><branche></code>. Lancer <code>git rebase --keep-base <amont> <branche></code> équivaut à lancer <code>git rebase --reapply-cherry-picks --no-fork-point --onto <amont>...<branche> <amont> <branche></code>.</p> <div class="paragraph"> <p>Cette option est utile dans le cas où l’on développe une fonctionnalité au sommet d’une branche amont. Bien que la fonction soit en cours de travaux, la branche amont peut progresser et ce n’est peut-être pas la meilleure idée de continuer à rebaser sur le sommet de l’amont au lieu de garder la base telle quelle. Comme le commit de base est inchangé cette option implique <code>--reapply-cherry-picks</code> pour éviter de perdre des commits.</p> </div> <div class="paragraph"> <p>Bien que cette option et <code>--fork-point</code> trouvent la base de fusion entre <code><amont></code> et <code><branche></code>, cette option utilise la base de fusion comme <em>point de départ</em> sur lequel les nouveaux commits seront créés, tandis que <code>--fork-point</code> utilise la base de fusion pour déterminer l'_ensemble de commits` qui sera rebasé.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase-ltbrancheamontgt"> <a class="anchor" href="#git-rebase-ltbrancheamontgt"></a><branche_amont> </dt> <dd> <p>Branche en amont à comparer. Peut être n’importe quel commit valide, pas seulement un nom de branche existant. Par défaut à l’amont configuré pour la branche actuelle.</p> </dd> <dt class="hdlist1" id="git-rebase-ltbranchegt"> <a class="anchor" href="#git-rebase-ltbranchegt"></a><branche> </dt> <dd> <p>Branche de travail ; la valeur par défaut est <code>HEAD</code>.</p> </dd> <dt class="hdlist1" id="git-rebase---apply"> <a class="anchor" href="#git-rebase---apply"></a>--apply </dt> <dd> <p>Utiliser des stratégies de rebasage (appelant <code>git-am</code> en interne). Cette option peut devenir un non-op dans le futur une fois que le moteur de fusion gère tout ce que <em>apply</em> fait.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---emptydropkeepstop"> <a class="anchor" href="#git-rebase---emptydropkeepstop"></a>--empty=(drop|keep|stop) </dt> <dd> <p>Comment gérer les commits qui ne sont pas vide au départ et ne sont pas des picorages propres d’un commit amont, mais qui deviennent vides plus tard après le rebasage (parce qu’ils contiennent un sous-ensemble de modifications déjà en amont) :</p> <div class="openblock"> <div class="content"> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-codedropcode"> <a class="anchor" href="#git-rebase-codedropcode"></a><code>drop</code> </dt> <dd> <p>Le commit sera abandonné. C’est le comportement par défaut.</p> </dd> <dt class="hdlist1" id="git-rebase-codekeepcode"> <a class="anchor" href="#git-rebase-codekeepcode"></a><code>keep</code> </dt> <dd> <p>Le commit sera gardé. Cette option est implicite lorsque <code>--exec</code> est spécifiée sauf si <code>-i</code>/<code>--interactive</code> est également spécifié.</p> </dd> <dt class="hdlist1" id="git-rebase-codestopcode"> <a class="anchor" href="#git-rebase-codestopcode"></a><code>stop</code> </dt> <dt class="hdlist1" id="git-rebase-codeaskcode"> <a class="anchor" href="#git-rebase-codeaskcode"></a><code>ask</code> </dt> <dd> <p>La rebasage s’arrêtera lorsque le commit sera appliqué, vous permettant de choisir de l’abandonner, d’éditer encore des fichiers ou simplement de valider les modifications vides. Cette option est implicite lorsque <code>-i</code>/<code>--interactive</code> est spécifiée. <code>ask</code> est un synonyme obsolète de <code>stop</code>.</p> </dd> </dl> </div> </div> </div> <div class="paragraph"> <p>Notez que les commits qui sont déjà vides sont maintenus (à moins que <code>--no-keep-empty</code> soit spécifié), et les commits qui sont des propres picorages (comme déterminé par <code>git log --cherry-mark ...</code>) sont détectés et abandonnés à une étape préliminaire (sauf si <code>--reapply-cherry-picks</code> ou <code>--keep-base</code> est passé).</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---no-keep-empty"> <a class="anchor" href="#git-rebase---no-keep-empty"></a>--no-keep-empty </dt> <dt class="hdlist1" id="git-rebase---keep-empty"> <a class="anchor" href="#git-rebase---keep-empty"></a>--keep-empty </dt> <dd> <p>Ne pas garder les commits qui sont vides au départ avant le rebasage (c.-à-d. qui ne changent rien de leur parent) dans le résultat. La valeur par défaut est de garder les commits qui commencent à vide, puisque la création de tels commits nécessite le passage du drapeau de surcharge <code>--allow-empty</code> à <code>git commit</code>, signifiant qu’un utilisateur a très intentionnellement créé un tel commit et veut donc le garder.</p> <div class="paragraph"> <p>L’utilisation de ce drapeau sera probablement rare, puisque vous pouvez vous débarrasser des commits qui commencent vides en lançant simplement un rebasage interactif et en supprimant les lignes correspondant aux commits que vous ne voulez pas. Ce drapeau existe comme un raccourci pratique, pour les cas où des outils externes génèrent de nombreux commits vides et vous voulez qu’ils soient tous enlevés.</p> </div> <div class="paragraph"> <p>Pour les commits qui ne démarrent pas vides mais deviennent vides après le rebasage, voir le drapeau <code>--empty</code>.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---reapply-cherry-picks"> <a class="anchor" href="#git-rebase---reapply-cherry-picks"></a>--reapply-cherry-picks </dt> <dt class="hdlist1" id="git-rebase---no-reapply-cherry-picks"> <a class="anchor" href="#git-rebase---no-reapply-cherry-picks"></a>--no-reapply-cherry-picks </dt> <dd> <p>Réappliquer tous les picorages propres de tous les commits amonts au lieu de le abandonner préventivement. (Si ces commit deviennent vides plus tard après le rebasage, parce qu’ils contiennent un sous-ensemble de modifications déjà en amont, le comportement les concernant est dicté par le drapeau <code>--empty</code>).</p> <div class="paragraph"> <p>En l’absence de <code>--keep-base</code> (ou si <code>--no-reapply-cherry-picks</code> est donné), ces commits seront automatiquement abandonnés. Parce que cela nécessite la lecture de tous les commits en amont, cela peut être coûteux dans les dépôts avec un grand nombre de commits en amont qui doivent être lus. Lors de l’utilisation du backend <em>merge</em>, des avertissements seront émis pour chaque commit abandonné (sauf <code>--quiet</code> est donnée). Des conseils seront également émis à moins que <code>advice.skippedCherryPicks</code> ne soit mis à false (voir <a href='/docs/git-config/fr'>git-config[1]</a>).</p> </div> <div class="paragraph"> <p><code>--reapply-cherry-picks</code> permet à rebase de sauter la lecture de tous les commits en amont, de manière à potentiellement améliorer les performances.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---allow-empty-message"> <a class="anchor" href="#git-rebase---allow-empty-message"></a>--allow-empty-message </dt> <dd> <p>Opération blanche. Rebaser des commits avec un message vide échouaient auparavant et cette option remplacerait ce comportement, permettant aux commits avec des messages vides d’être rebaser. Maintenant, les commits avec un message vide ne font plus échouer un rebasage.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--m"> <a class="anchor" href="#git-rebase--m"></a>-m </dt> <dt class="hdlist1" id="git-rebase---merge"> <a class="anchor" href="#git-rebase---merge"></a>--merge </dt> <dd> <p>Utiliser des stratégies de fusion pour rebaser (par défaut).</p> <div class="paragraph"> <p>Notez qu’un rebasage fusionne les travaux en rejouant chaque commit de la branche de travail sur le dessus de la branche <code><amont></code>. En raison de cela, lorsqu’un conflit de fusion se produit, le côté déclaré comme «nôtre» (<em>ours</em>) est la série rebasée jusqu’ici, commençant par <code><amont></code> et «leurs» (<em>theirs</em>) est la branche de travail. En d’autres termes, les côtés sont échangés.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--sltstratgiegt"> <a class="anchor" href="#git-rebase--sltstratgiegt"></a>-s <stratégie> </dt> <dt class="hdlist1" id="git-rebase---strategyltstrategiegt"> <a class="anchor" href="#git-rebase---strategyltstrategiegt"></a>--strategy=<strategie> </dt> <dd> <p>Utiliser la stratégie de fusion donnée, au lieu du <code>ort</code> par défaut. Cela implique <code>--merge</code>.</p> <div class="paragraph"> <p>Parce que <code>git rebase</code> rejoue chaque commit de la branche de travail par dessus la branche <em><amont></em> en utilisant la stratégie donnée, utiliser la stratégie <code>ours</code> vide simplement toutes les rustines de <em><branche></em>, ce qui n’a pas de sens.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--Xltoption-de-strategiegt"> <a class="anchor" href="#git-rebase--Xltoption-de-strategiegt"></a>-X <option-de-strategie> </dt> <dt class="hdlist1" id="git-rebase---strategy-optionltoption-de-stratgiegt"> <a class="anchor" href="#git-rebase---strategy-optionltoption-de-stratgiegt"></a>--strategy-option=<option-de-stratégie> </dt> <dd> <p>Passer l'<em><option-de-stratégie></em> à la stratégie de fusion. Cela implique <code>--merge</code> et, si aucune stratégie n’a été spécifiée, <code>-s ort</code>. Notez le renversement de <em>ours</em> et <em>theirs</em> comme indiqué ci-dessus pour l’option <code>-m</code>.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---rerere-autoupdate"> <a class="anchor" href="#git-rebase---rerere-autoupdate"></a>--rerere-autoupdate </dt> <dt class="hdlist1" id="git-rebase---no-rerere-autoupdate"> <a class="anchor" href="#git-rebase---no-rerere-autoupdate"></a>--no-rerere-autoupdate </dt> <dd> <p>Après que le mécanisme rerere réutilise une résolution enregistrée sur le conflit actuel pour mettre à jour les fichiers dans l’arbre de travail, lui permettre de mettre également à jour l’index avec le résultat de la résolution. <code>--no-rerere-autoupdate</code> est un bon moyen de revérifier ce que <code>rerere</code> a fait et de détecter des erreurs de fusion potentielles, avant de valider le résultat dans l’index avec un <code>git add</code> séparé.</p> </dd> </dl> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase--Sltidclgt"> <a class="anchor" href="#git-rebase--Sltidclgt"></a>-S[<idclé>] </dt> <dt class="hdlist1" id="git-rebase---gpg-signltidclgt"> <a class="anchor" href="#git-rebase---gpg-signltidclgt"></a>--gpg-sign[=<idclé>] </dt> <dt class="hdlist1" id="git-rebase---no-gpg-sign"> <a class="anchor" href="#git-rebase---no-gpg-sign"></a>--no-gpg-sign </dt> <dd> <p>Signer les commits avec GPG. L’argument <code>idclé</code> est optionnel avec par défaut l’identité du validateur ; si spécifiée, elle doit être collée à l’option sans aucun espace. <code>--no-gpg-sign</code> est utile pour annuler l’effet de la variable de configuration <code>commit.gpgSign</code> ainsi que tout <code>--gpg-sign</code> précédent.</p> </dd> <dt class="hdlist1" id="git-rebase--q"> <a class="anchor" href="#git-rebase--q"></a>-q </dt> <dt class="hdlist1" id="git-rebase---quiet"> <a class="anchor" href="#git-rebase---quiet"></a>--quiet </dt> <dd> <p>Être silencieux. Implique <code>--no-stat</code>.</p> </dd> <dt class="hdlist1" id="git-rebase--v"> <a class="anchor" href="#git-rebase--v"></a>-v </dt> <dt class="hdlist1" id="git-rebase---verbose"> <a class="anchor" href="#git-rebase---verbose"></a>--verbose </dt> <dd> <p>Mode bavard. Implique <code>--stat</code>.</p> </dd> <dt class="hdlist1" id="git-rebase---stat"> <a class="anchor" href="#git-rebase---stat"></a>--stat </dt> <dd> <p>Afficher un diffstat de ce qui a changé en amont depuis le dernier rebasage. Le diffstat est également contrôlé par l’option de configuration <code>rebase.stat</code>.</p> </dd> <dt class="hdlist1" id="git-rebase--n"> <a class="anchor" href="#git-rebase--n"></a>-n </dt> <dt class="hdlist1" id="git-rebase---no-stat"> <a class="anchor" href="#git-rebase---no-stat"></a>--no-stat </dt> <dd> <p>Ne pas afficher un diffstat dans le cadre du processus de rebasage.</p> </dd> <dt class="hdlist1" id="git-rebase---no-verify"> <a class="anchor" href="#git-rebase---no-verify"></a>--no-verify </dt> <dd> <p>Cette option court-circuite le crochet pre-rebase. Voir aussi <a href='/docs/githooks/fr'>githooks[5]</a>.</p> </dd> <dt class="hdlist1" id="git-rebase---verify"> <a class="anchor" href="#git-rebase---verify"></a>--verify </dt> <dd> <p>Permet l’exécution du crochet pre-rebase, qui est la valeur par défaut. Cette option peut être utilisée pour remplacer <code>--no-verify</code>. Voir aussi <a href='/docs/githooks/fr'>githooks[5]</a>.</p> </dd> <dt class="hdlist1" id="git-rebase--Cltngt"> <a class="anchor" href="#git-rebase--Cltngt"></a>-C<n> </dt> <dd> <p>S’assurer qu’au moins <code><n></code> lignes du contexte environnant correspondent avant et après chaque modification. Lorsqu’il y a moins de lignes de contexte environnant, elles doivent toutes correspondre. Par défaut, aucun contexte n’est jamais ignoré. Implique <code>--apply</code>.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---no-ff"> <a class="anchor" href="#git-rebase---no-ff"></a>--no-ff </dt> <dt class="hdlist1" id="git-rebase---force-rebase"> <a class="anchor" href="#git-rebase---force-rebase"></a>--force-rebase </dt> <dt class="hdlist1" id="git-rebase--f"> <a class="anchor" href="#git-rebase--f"></a>-f </dt> <dd> <p>Rejouer individuellement tous les commits rebasés au lieu d’aller en avance-rapide sur ceux inchangés. Cela garantit que toute l’historique de la branche rebasée est composé de nouveaux commits.</p> <div class="paragraph"> <p>Vous pouvez trouver cela utile après avoir annulé une fusion d’une branche de sujet, car cette option recrée la branche de sujet avec des commits frais afin qu’elle puisse être fusionnée avec succès sans avoir besoin d"'inverser l’inversion" (voir le <a href="/docs/howto/revert-a-faulty-merge/fr">Comment inverser une mauvaise fusion</a> pour plus de détails).</p> </div> </dd> <dt class="hdlist1" id="git-rebase---fork-point"> <a class="anchor" href="#git-rebase---fork-point"></a>--fork-point </dt> <dt class="hdlist1" id="git-rebase---no-fork-point"> <a class="anchor" href="#git-rebase---no-fork-point"></a>--no-fork-point </dt> <dd> <p>Utiliser le reflog pour trouver un meilleur ancêtre commun entre <code><amont></code> et <code><branche></code> lors du calcul des commits introduits par <code><branche></code>.</p> <div class="paragraph"> <p>Lorsque <code>--fork-point</code> est actif, <em>fork_point</em> sera utilisé au lieu de <code><amont></code> pour calculer l’ensemble des commits à rebaser, où <em>fork_point</em> est le résultat de la commande <code>git merge-base --fork-point <amont> <branche></code> (voir <a href='/docs/git-merge-base/fr'>git-merge-base[1]</a>). Si <em>fork_point</em> finit par être vide, l'<code><amont></code> sera utilisé par défaut.</p> </div> <div class="paragraph"> <p>Si <code><amon></code> ou <code>--keep-base</code> est fourni sur la ligne de commande, la valeur par défaut est <code>--no-fork-point</code>, sinon la valeur par défaut est <code>--fork-point</code>. Voir aussi `rebase.forkpoint ` dans <a href='/docs/git-config/fr'>git-config[1]</a>.</p> </div> <div class="paragraph"> <p>Si votre branche était basée sur <em><amont></em> mais qu'<em><amont></em> a été rembobinée et votre branche contient des commits qui ont été abandonnés, cette option peut être utilisée avec <code>--keep-base</code> afin de laisser tomber ces commits de votre branche.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---ignore-whitespace"> <a class="anchor" href="#git-rebase---ignore-whitespace"></a>--ignore-whitespace </dt> <dd> <p>Ignorer les différences d’espace blanc en essayant de concilier les différences. Actuellement, chaque backend met en œuvre une approximation de ce comportement :</p> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-appliquerlebackend"> <a class="anchor" href="#git-rebase-appliquerlebackend"></a>appliquer le backend </dt> <dd> <p>Lors de l’application d’une rustine, ignorer les modifications d’espace blanc dans les lignes de contexte. Malheureusement, cela signifie que si les lignes « anciennes » remplacées par la rustine ne diffèrent que par des espace blanc du fichier existant, vous obtiendrez un conflit de fusion au lieu d’une application correcte réussie.</p> </dd> <dt class="hdlist1" id="git-rebase-backenddefusion"> <a class="anchor" href="#git-rebase-backenddefusion"></a>backend de fusion </dt> <dd> <p>Traiter les lignes avec seulement des modifications d’espace blanc comme inchangées lors de la fusion. Malheureusement, cela signifie que toutes les sections de rustine qui étaient destinés à modifier les espaces blancs et rien d’autre seront abandonnés, même si l’autre côté n’avait aucune modification susceptible de générer un conflit.</p> </dd> </dl> </div> </dd> <dt class="hdlist1" id="git-rebase---whitespaceltoptiongt"> <a class="anchor" href="#git-rebase---whitespaceltoptiongt"></a>--whitespace=<option> </dt> <dd> <p>Ce drapeau est passé au programme <code>git apply</code> (voir <a href='/docs/git-apply/fr'>git-apply[1]</a>) qui applique la rustine. Implique <code>--apply</code>.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---committer-date-is-author-date"> <a class="anchor" href="#git-rebase---committer-date-is-author-date"></a>--committer-date-is-author-date </dt> <dd> <p>Au lieu d’utiliser la date actuelle comme date de validateur, utilisez la date de l’auteur du commit comme date de validateur. Cette option implique <code>--force-rebase</code>.</p> </dd> <dt class="hdlist1" id="git-rebase---ignore-date"> <a class="anchor" href="#git-rebase---ignore-date"></a>--ignore-date </dt> <dt class="hdlist1" id="git-rebase---reset-author-date"> <a class="anchor" href="#git-rebase---reset-author-date"></a>--reset-author-date </dt> <dd> <p>Au lieu d’utiliser la date d’auteur du commit d’origine, utiliser la date actuelle comme date de d’auteur du commit rebasé. Cette option implique <code>--force-rebase</code>.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---signoff"> <a class="anchor" href="#git-rebase---signoff"></a>--signoff </dt> <dd> <p>Ajouter une ligne terminale <code>Signed-off-by</code> à tous les commits rebasés. Notez que si <code>--interactive</code> est donné alors seulement les commits marqués pour être sélectionnés, modifiés ou reformulés auront la ligne terminale ajoutée.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--i"> <a class="anchor" href="#git-rebase--i"></a>-i </dt> <dt class="hdlist1" id="git-rebase---interactive"> <a class="anchor" href="#git-rebase---interactive"></a>--interactive </dt> <dd> <p>Faire une liste des commits qui sont sur le point d’être rebasés. Laisser l’utilisateur modifier cette liste avant de rebaser. Ce mode peut également être utilisé pour scinder les commits (voir SCINDER LES COMMITS ci-dessous).</p> <div class="paragraph"> <p>Le format de la liste de commits peut être modifié en définissant l’option de configuration rebase.instructionFormat. Un format d’instruction personnalisé aura automatiquement le hash de commit préfixé au format.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--r"> <a class="anchor" href="#git-rebase--r"></a>-r </dt> <dt class="hdlist1" id="git-rebase---rebase-mergesrebase-cousinsno-rebase-cousins"> <a class="anchor" href="#git-rebase---rebase-mergesrebase-cousinsno-rebase-cousins"></a>--rebase-merges[=(rebase-cousins|no-rebase-cousins)] </dt> <dt class="hdlist1" id="git-rebase---no-rebase-merges"> <a class="anchor" href="#git-rebase---no-rebase-merges"></a>--no-rebase-merges </dt> <dd> <p>Par défaut, un rebasage va simplement abandonner les commits de fusion de la liste de todo, et mettre les commits rebasés en une seule branche linéaire. Avec <code>--rebase-merges</code>, le rebasage tentera plutôt de préserver la structure de ramification dans les commits qui doivent être rebasés, en recréant les commits de fusion. Tout conflit de fusion résolu ou toute modification manuelle dans ces commits de fusion devra être résolu/reappliqué manuellement. <code>--no-rebase-merges</code> peut être utilisé pour contrecarrer à la fois l’option de config <code>rebase.rebaseMerges</code> et un <code>--rebase-merges</code> précédent.</p> <div class="paragraph"> <p>Quand le rebasage fait une fusion, il y a deux modes: <code>rebase-cousins</code> et <code>no-rebase-cousins</code>. Si le mode n’est pas spécifié, il vaut par défaut <code>no-rebase-cousins</code>. Dans le mode <code>no-rebase-cousins</code>, les commits qui n’ont pas d'<em><amont></em> comme ancêtre direct garderont leur point de branche original, c’est-à-dire que les commits qui seraient exclus par l’option <code>--ancestry-path</code> de <a href='/docs/git-log/fr'>git-log[1]</a> garderont leurs ancêtres originaux par défaut. Dans le mode <code>rebase-cousins</code>, ces commits sont plutôt rebasés sur <em><amont></em> (ou <em><nouvellebase></em> de <code>--onto</code>, si spécifiée).</p> </div> <div class="paragraph"> <p>Il est actuellement seulement possible de recréer des commits de fusion en utilisant la stratégie de fusion <code>ort</code> ; les différentes stratégies de fusion ne peuvent être utilisées que par des commandes explicites <code>exec git merge -s <strategie> [...]</code>.</p> </div> <div class="paragraph"> <p>Voir aussi FUSIONS DE REBASAGE et OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--xltcmdgt"> <a class="anchor" href="#git-rebase--xltcmdgt"></a>-x <cmd> </dt> <dt class="hdlist1" id="git-rebase---execltcmdgt"> <a class="anchor" href="#git-rebase---execltcmdgt"></a>--exec <cmd> </dt> <dd> <p>Ajouter "exec <cmd>" après chaque ligne créant un commit dans l’historique final. <em><cmd></em> sera interprété comme une ou plusieurs commandes de shell. Toute commande qui échoue interrompra le rebasage, avec le code de sortie 1.</p> <div class="paragraph"> <p>Vous pouvez exécuter plusieurs commandes en utilisant une instance de <code>--exec</code> avec plusieurs commandes :</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase -i --exec "cmd1 && cmd2 && ..."</pre> </div> </div> <div class="paragraph"> <p>ou en donnant plus d’un <code>--exec</code> :</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase -i --exec "cmd1" --exec "cmd2" --exec ...</pre> </div> </div> <div class="paragraph"> <p>Si <code>--autosquash</code> est utilisé, les lignes <code>exec</code> ne seront pas ajoutées pour les commits intermédiaires, et n’apparaîtront qu’à la fin de chaque série squash/fixup.</p> </div> <div class="paragraph"> <p>Cela utilise la machinerie <code>--interactive</code> interne, mais elle peut être exécutée sans un <code>--interactive</code> explicite.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---root"> <a class="anchor" href="#git-rebase---root"></a>--root </dt> <dd> <p>Rebaser tous les commits atteignables à partir de <em><branche></em>, au lieu de les limiter avec <em><amont></em>. Cela vous permet de rebaser le ou les commits racines sur une branche.</p> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---autosquash"> <a class="anchor" href="#git-rebase---autosquash"></a>--autosquash </dt> <dt class="hdlist1" id="git-rebase---no-autosquash"> <a class="anchor" href="#git-rebase---no-autosquash"></a>--no-autosquash </dt> <dd> <p>Écrase automatiquement les commits avec des messages spécialement formatés dans les commits précédents en cours de rebasage. Si un message de commit commence par "squash!", "fixup!" ou "amend!", le reste du titre est pris comme spécificateur de commit, qui correspond à un commit précédent si il correspond au titre ou à l’empreinte de ce commit. Si aucun commit ne correspond exactement, les correspondances du spécificateur avec le début des titres de commit sont envisagées.</p> <div class="paragraph"> <p>Dans la liste des à faire de rebase, les actions d’écrasement, de correction et de modification des commits sont changées de <code>pick</code> à <code>squash</code>, <code>fixup</code> ou <code>fixup -C</code>, respectivement, et elles sont déplacés juste après le commit ils modifient. L’option <code>--interactive</code> peut être utilisée pour examiner et modifier la liste à faire avant de procéder.</p> </div> <div class="paragraph"> <p>La façon recommandée de créer des commits avec des marqueurs d’écrasement est d’utiliser les options <code>--squash</code>, <code>--fixup</code>, <code>--fixup=amend:</code> ou <code>--fixup=reword:</code> de <a href='/docs/git-commit/fr'>git-commit[1]</a>, qui prennent le commit cible comme argument et remplissent automatiquement le titre du nouveau commit à partir de cela.</p> </div> <div class="paragraph"> <p>Définir la variable de configuration <code>rebase.autoSquash</code> à true permet l’application d’autosquash par défaut pour le rebasage interactif. L’option <code>--no-autosquash</code> peut être utilisée pour remplacer ce réglage.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---autostash"> <a class="anchor" href="#git-rebase---autostash"></a>--autostash </dt> <dt class="hdlist1" id="git-rebase---no-autostash"> <a class="anchor" href="#git-rebase---no-autostash"></a>--no-autostash </dt> <dd> <p>Créer automatiquement une entrée temporaire de remisage avant le début de l’opération et l’appliquer après la fin de l’opération. Cela signifie que vous pouvez exécuter l’opération sur un arbre de travail sale. Cependant, utilisez-le avec précaution : l’application finale du remisage après une fusion réussie peut entraîner des conflits non négligeables.</p> </dd> <dt class="hdlist1" id="git-rebase---reschedule-failed-exec"> <a class="anchor" href="#git-rebase---reschedule-failed-exec"></a>--reschedule-failed-exec </dt> <dt class="hdlist1" id="git-rebase---no-reschedule-failed-exec"> <a class="anchor" href="#git-rebase---no-reschedule-failed-exec"></a>--no-reschedule-failed-exec </dt> <dd> <p>Reprogrammer automatiquement les commandes <code>exec</code> qui ont échoué. Cela n’a de sens qu’en mode interactif (ou lorsqu’une option <code>--exec</code> a été fournie).</p> <div class="paragraph"> <p>Cette option s’applique une fois qu’un rebasage est lancé. Il est conservé pour l’ensemble du rebasage en fonction, dans l’ordre, de l’option de ligne de commande fournie au <code>git rebase</code> initial, la configuration <code>rebase.rescheduleFailedExec</code> (voir <a href='/docs/git-config/fr'>git-config[1]</a> ou "CONFIGURATION" ci-dessous), ou par défaut false (faux).</p> </div> <div class="paragraph"> <p>Enregistrer cette option pour tout le rebasage est une fonctionnalité de commodité. Sinon, une <code>--no-reschedule-failed-exec</code> explicite au début serait remplacée par la présence d’une configuration <code>rebase.rescheduleFailedExec=true</code> lorsque <code>git rebase --continue</code> est invoquée. Actuellement, vous ne pouvez pas passer <code>-[no-]reschedule-failed-exec</code> à <code>git rebase --continue</code>.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---update-refs"> <a class="anchor" href="#git-rebase---update-refs"></a>--update-refs </dt> <dt class="hdlist1" id="git-rebase---no-update-refs"> <a class="anchor" href="#git-rebase---no-update-refs"></a>--no-update-refs </dt> <dd> <p>Mettre à jour en force automatiquement toute branche qui pointe sur les commits qui sont en train d’être rebasés. Toutes les branches qui sont extraites dans les arbre-de-travails ne sont pas ne sont pas mises à jour de cette manière.</p> <div class="paragraph"> <p>Si la variable de configuration <code>rebase.updateRefs</code> est définie, cette option peut être utilisée pour remplacer et désactiver ce réglage.</p> </div> <div class="paragraph"> <p>Voir aussi OPTIONS INCOMPATIBLES ci-dessous.</p> </div> </dd> </dl> </div> </div> </div> <div class="sect1"> <h2 id="_options_incompatibles"><a class="anchor" href="#_options_incompatibles"></a>OPTIONS INCOMPATIBLES</h2> <div class="sectionbody"> <div class="paragraph"> <p>Les options suivantes :</p> </div> <div class="ulist"> <ul> <li> <p>--apply</p> </li> <li> <p>--whitespace</p> </li> <li> <p>-C</p> </li> </ul> </div> <div class="paragraph"> <p>sont incompatibles avec les options suivantes :</p> </div> <div class="ulist"> <ul> <li> <p>--merge</p> </li> <li> <p>--strategy</p> </li> <li> <p>--strategy-option</p> </li> <li> <p>--autosquash</p> </li> <li> <p>--rebase-merges</p> </li> <li> <p>--interactive</p> </li> <li> <p>--exec</p> </li> <li> <p>--no-keep-empty</p> </li> <li> <p>--empty=</p> </li> <li> <p>--[no-]reapply-cherry-picks lorsqu’utilisé sans --keep-base</p> </li> <li> <p>--update-refs</p> </li> <li> <p>--root lorsqu’il est utilisé sans --onto</p> </li> </ul> </div> <div class="paragraph"> <p>En outre, les paires d’options suivantes sont incompatibles :</p> </div> <div class="ulist"> <ul> <li> <p>--keep-base et --onto</p> </li> <li> <p>--keep-base et --root</p> </li> <li> <p>--fork-point et --root</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="_différences_de_comportement"><a class="anchor" href="#_différences_de_comportement"></a>DIFFÉRENCES DE COMPORTEMENT</h2> <div class="sectionbody"> <div class="paragraph"> <p><code>git rebase</code> a deux backends primaires : <em>apply</em> et <em>merge</em>. (Le backend <em>apply</em> était connu comme le backend <em>am</em>, mais le nom a conduit à la confusion car il ressemble à un verbe au lieu d’un nom. De plus, le backend <em>merge</em> était connu comme le backend interactif, mais il est maintenant utilisé aussi pour les cas non interactifs. Les deux ont été renommés en fonction de la fonctionnalité de bas niveau qui sous-tend chacun.) Il y a quelques différences subtiles dans la façon dont ces deux backends se comportent :</p> </div> <div class="sect2"> <h3 id="_commits_vides"><a class="anchor" href="#_commits_vides"></a>Commits vides</h3> <div class="paragraph"> <p>Le backend <em>apply</em> élimine malheureusement des commits intentionnellement vides, c’est-à-dire des commits qui ont commencé vides, bien qu’ils soient rares en pratique. Il élimine également des commits qui deviennent vides et il n’y a aucune option pour contrôler ce comportement.</p> </div> <div class="paragraph"> <p>Le backend <em>merge</em> conserve intentionnellement les commits vides par défaut (mais avec <code>-i</code> ils sont marqués comme vides dans l’éditeur de liste à faire, ou ils peuvent être éliminés automatiquement avec <code>--no-keep-empty</code>).</p> </div> <div class="paragraph"> <p>De manière similaire au backend apply, par défaut le backend merge abandonne les commits qui deviennentt vides à moins que <code>-i</code>/<code>--interactive</code> ne soit spécifié (auquel cas il s’arrête et demande à l’utilisateur quoi faire). Le backend merge a également une option <code>--empty=(drop|keep|stop)</code> pour changer le comportement de gestion des commits qui deviennent vides.</p> </div> </div> <div class="sect2"> <h3 id="_détection_de_renommage_de_répertoire"><a class="anchor" href="#_détection_de_renommage_de_répertoire"></a>Détection de renommage de répertoire</h3> <div class="paragraph"> <p>En raison de l’absence d’informations précises sur les arbres (provenant de la construction d’ancêtres factices avec l’information limitée disponible dans les rustines), la détection de renommage est désactivée dans le backend <em>apply</em>. La déactivation de renommage de répertoire signifie que si un côté de l’historique renomme un répertoire et que l’autre ajoute de nouveaux fichiers à l’ancien répertoire, alors les nouveaux fichiers seront laissés en arrière dans l’ancien répertoire sans avertir au moment de rebasage que vous pourriez vouloir déplacer ces fichiers dans le nouveau répertoire.</p> </div> <div class="paragraph"> <p>La détection de renommage de répertoire fonctionne avec le backend <em>merge</em> pour vous fournir des avertissements dans de tels cas.</p> </div> </div> <div class="sect2"> <h3 id="_contexte"><a class="anchor" href="#_contexte"></a>Contexte</h3> <div class="paragraph"> <p>Le backend <em>apply</em> fonctionne en créant une séquence de rustines (en appelant <code>format-patch</code> en interne), puis en appliquant les rustines en séquence (en appelant <code>am</code> en interne). Les rustines sont composées de plusieurs sections, chacune avec des numéros de ligne, une région de contexte et les changements réels. Les numéros de ligne doivent être pris avec un certain décalage, puisque l’autre côté aura probablement inséré ou supprimé des lignes plus haut dans le fichier. La région de contexte est destinée à aider à trouver comment ajuster les numéros de ligne afin d’appliquer les changements aux bonnes lignes. Cependant, si plusieurs zones du code ont les mêmes lignes de contexte, le mauvais peut être choisi. Il y a des cas réels où cela a causé la réapplication incorrecte de commits sans conflit signalé. Régler <code>diff.context</code> à une valeur plus grande peut éliminer ce type de problèmes, mais augmente les probabilités de conflits (puisque plus de lignes de contexte en correspondance seront nécessaires pour valider l’application de la rustine).</p> </div> <div class="paragraph"> <p>Le backend <em>merge</em> fonctionne avec une copie complète de chaque fichier pertinent, l’isolant de ces types de problèmes.</p> </div> </div> <div class="sect2"> <h3 id="_étiquetage_des_marqueurs_de_conflits"><a class="anchor" href="#_étiquetage_des_marqueurs_de_conflits"></a>Étiquetage des marqueurs de conflits</h3> <div class="paragraph"> <p>Lorsqu’il y a des conflits de contenu, la machinerie de fusion tente d’annoter les marqueurs de conflit de chaque côté avec les commits d’où le contenu est venu. Comme le backend <em>apply</em> laisse tomber les informations originales sur les commits rebasés et leurs parents (et génère plutôt de nouveaux faux commits basés sur des informations réduties dans les rustines générées), ces commits ne peuvent pas être identifiés ; au lieu de cela, il doit revenir à un résumé de commit. Aussi, quand <code>merge.conflictStyle</code> est défini à <code>diff3</code> ou <code>zdiff3</code>, le backend <em>apply</em> utilisera une « base de fustion construite » pour étiqueter le contenu de la base de fusion, et donc ne fournir aucune information sur le commit de base de fusion.</p> </div> <div class="paragraph"> <p>Le backend <em>merge</em> fonctionne avec les commits complets des deux côtés de l’historique et n’a donc pas de telles limitations.</p> </div> </div> <div class="sect2"> <h3 id="_crochets"><a class="anchor" href="#_crochets"></a>Crochets</h3> <div class="paragraph"> <p>Historiquement, le backend <em>apply</em> n’appellait pas le crochet post-commit, tandis que le backend <em>merge</em> le faisait. Les deux ont appelé le crochet post-checkout, bien que le backend <em>merge</em> n’affiche pas sa sortie. De plus, les deux backends n’appellent le crochet post-checkout qu’avec le point de départ du rebasage, pas les commits intermédiaires ni le commit final. Dans chaque cas, l’appel de ces crochets était un accident d’implémentation plutôt qu’une volonté de conception (les deux backends ont été initialement mis en œuvre comme scripts shell et invoquait ainsi d’autres commandes comme <code>git checkout</code> ou <code>git commit</code> qui appellaient les crochets). Les deux backends devraient avoir le même comportement, bien qu’il ne soit pas entièrement clair lequel est correct, si tant est qu’il le soit. rebase va certainementarrêter d’appeler l’un de ces crochets à l’avenir.</p> </div> </div> <div class="sect2"> <h3 id="_interruptibilité"><a class="anchor" href="#_interruptibilité"></a>Interruptibilité</h3> <div class="paragraph"> <p>Le backend <em>apply</em> a des problèmes de sécurité avec une interruption au mauvais moment ; si l’utilisateur presse Ctrl-C au mauvais moment pour essayer d’annuler le rebasage, le rebasage peut entrer dans un état où il ne peut pas être annulé avec un <code>git rebase --abort</code> ultérieur. Le backend de fusion ne semble pas souffrir de la même définition . (Voir <a href="https://lore.kernel.org/git/20200207132152.GC2868@szeder.dev/" class="bare">https://lore.kernel.org/git/20200207132152.GC2868@szeder.dev/</a> pour plus de détails.)</p> </div> </div> <div class="sect2"> <h3 id="_reformulation_de_commit"><a class="anchor" href="#_reformulation_de_commit"></a>Reformulation de commit</h3> <div class="paragraph"> <p>Lorsqu’un conflit survient en rebasant, rebase s’arrête et demande à l’utilisateur de résoudre les conflits. Comme l’utilisateur peut avoir besoin de faire des changements notables tout en résolvant les conflits, après que les conflits sont réglés et que l’utilisateur a exécuté <code>git rebase --continue</code>, le rebasage devraitouvrir un éditeur et demander à l’utilisateur de mettre à jour le message de validation. Le backend <em>merge</em> fait cela, alors que le backend <em>apply</em> applique aveuglément le message de commit original.</p> </div> </div> <div class="sect2"> <h3 id="_diverses_différences"><a class="anchor" href="#_diverses_différences"></a>Diverses différences</h3> <div class="paragraph"> <p>Il ya quelques différences comportementales supplémentaires que la plupart des gens considéreraient probablement peu fréquentes mais qui sont mentionnées pour être exhaustif :</p> </div> <div class="ulist"> <ul> <li> <p>Reflog : Les deux backends utiliseront des libellés différents pour décrire les modifications apportées au reflog, mais les deux utiliseront le mot "rebase".</p> </li> <li> <p>Messages de progression, d’information et d’erreur : Les deux backends fournissent des messages d’information et de progrès légèrement différents. De plus, le backend apply écrit des messages d’erreur (comme « Vos fichiers seraient écrasés…​ ») sur stdout, tandis que le backend de fusion les écrit sur stderr.</p> </li> <li> <p>Répertoires d’état : les deux backends conservent leur état dans différents répertoires sous <code>.git/</code></p> </li> </ul> </div> </div> </div> </div> <div class="sect1"> <h2 id="_les_stratégies_de_fusion"><a class="anchor" href="#_les_stratégies_de_fusion"></a>LES STRATÉGIES DE FUSION</h2> <div class="sectionbody"> <div class="paragraph"> <p>Le mécanisme de fusion (commandes <code>git merge</code> et <code>git pull</code>) permet de choisir les <em>stratégies de fusion</em> du backend avec l’option <code>-s</code>. Certaines stratégies peuvent également prendre leurs propres options, qui peuvent être passées en donnant des arguments <code>-X<option></code> à <code>git merge</code> et/ou <code>git pull</code>.</p> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-ort"> <a class="anchor" href="#git-rebase-ort"></a>ort </dt> <dd> <p>C’est la stratégie de fusion par défaut lors du tirage ou de la fusion d’une branche. Cette stratégie ne peut résoudre que deux têtes en utilisant un algorithme de fusion à trois voies. Lorsqu’il y a plus d’un ancêtre commun qui peut être utilisé pour la fusion à trois, il crée un arbre fusionné des ancêtres communs et l’utilise comme arbre de référence pour la fusion à trois. Il a été rapporté que cela permettait de réduire les conflits de fusion sans provoquer de fausses fusions, grâce à des tests effectués sur de vraies fusions tirées de l’historique de développement du noyau Linux 2.6. En outre, cette stratégie permet de détecter et de gérer les fusions impliquant des renommages. Elle ne peut actuellement pas utiliser les copies détectées. Le nom de cet algorithme est un acronyme ("Ostensibly Recursive’s Twin" : Jumeau ostensible de recurse) et vient du fait qu’il a été écrit pour remplacer l’algorithme par défaut précédent, <code>recursive</code>.</p> <div class="paragraph"> <p>La stratégie <em>ort</em> peut prendre les options suivantes :</p> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-ours"> <a class="anchor" href="#git-rebase-ours"></a>ours </dt> <dd> <p>Cette option oblige à résoudre les sections en conflit de manière autonome et propre en favorisant notre version (<em>our</em>). Les modifications par rapport à l’autre arbre qui n’entrent pas en conflit avec notre version se reflètent dans le résultat de la fusion. Pour un fichier binaire, tout le contenu est pris de notre côté.</p> <div class="paragraph"> <p>Il ne faut pas la confondre avec la stratégie de fusion <em>ours</em>, qui ne tient même pas compte de ce que contient l’autre arbre. Elle rejette tout ce que l’autre arbre a fait, déclarant que "notre" historique (<em>our</em>) contient tout ce qui s’y est passé.</p> </div> </dd> <dt class="hdlist1" id="git-rebase-theirs"> <a class="anchor" href="#git-rebase-theirs"></a>theirs </dt> <dd> <p>C’est le contraire de <em>ours</em> ; notez que, contrairement à <em>ours</em>, il n’y a pas de stratégie de fusion <em>theirs</em> avec laquelle confondre cette option de fusion.</p> </dd> <dt class="hdlist1" id="git-rebase-ignore-space-change"> <a class="anchor" href="#git-rebase-ignore-space-change"></a>ignore-space-change </dt> <dt class="hdlist1" id="git-rebase-ignore-all-space"> <a class="anchor" href="#git-rebase-ignore-all-space"></a>ignore-all-space </dt> <dt class="hdlist1" id="git-rebase-ignore-space-at-eol"> <a class="anchor" href="#git-rebase-ignore-space-at-eol"></a>ignore-space-at-eol </dt> <dt class="hdlist1" id="git-rebase-ignore-cr-at-eol"> <a class="anchor" href="#git-rebase-ignore-cr-at-eol"></a>ignore-cr-at-eol </dt> <dd> <p>Traiter les lignes avec le type de changement d’espace indiqué comme inchangées dans l’intérêt d’une fusion à trois points. Les changements d’espacement mélangés à d’autres changements de ligne ne sont pas ignorés. Voir aussi <a href='/docs/git-diff/fr'>git-diff[1]</a> <code>-b</code>, <code>-w</code>, <code>--ignore-space-at-eol</code>, et <code>--ignore-cr-at-eol</code>.</p> <div class="ulist"> <ul> <li> <p>Si "leur" version (<em>theirs</em>) n’introduit que des changements d’espacement sur une ligne, "notre" version (<em>our</em>) est utilisée ;</p> </li> <li> <p>Si "notre" version introduit des modifications dans l’espace blanc mais que "leur" version inclut un changement substantiel, "leur" version est utilisée ;</p> </li> <li> <p>Dans le cas contraire, la fusion se déroule de la manière habituelle.</p> </li> </ul> </div> </dd> <dt class="hdlist1" id="git-rebase-renormalize"> <a class="anchor" href="#git-rebase-renormalize"></a>renormalize </dt> <dd> <p>Il s’agit d’une extraction et d’un validation virtuelle des trois étapes de tout fichier qui nécessite une fusion à trois points. Cette option est destinée à être utilisée lors de la fusion de branches avec différents filtres clean ou règles de normalisation de fin de ligne. Voir "Fusion de branches avec différents attributs de validation/extraction" dans <a href='/docs/gitattributes/fr'>gitattributes[5]</a> pour plus de détails.</p> </dd> <dt class="hdlist1" id="git-rebase-no-renormalize"> <a class="anchor" href="#git-rebase-no-renormalize"></a>no-renormalize </dt> <dd> <p>Désactiver l’option <code>renormalize</code>. Cela surcharge la variable de configuration <code>merge.renormalize</code> .</p> </dd> <dt class="hdlist1" id="git-rebase-find-renamesltngt"> <a class="anchor" href="#git-rebase-find-renamesltngt"></a>find-renames[=<n>] </dt> <dd> <p>Activer la détection de renommage, en fixant éventuellement le seuil de similarité. C’est la valeur par défaut. Cela surcharge la variable de configuration <code>merge.renames</code>. Voir aussi <a href='/docs/git-diff/fr'>git-diff[1]</a> <code>--find-renames</code>.</p> </dd> <dt class="hdlist1" id="git-rebase-rename-thresholdltngt"> <a class="anchor" href="#git-rebase-rename-thresholdltngt"></a>rename-threshold=<n> </dt> <dd> <p>Synonyme obsolète pour <code>find-renames=<n></code>.</p> </dd> <dt class="hdlist1" id="git-rebase-subtreeltchemingt"> <a class="anchor" href="#git-rebase-subtreeltchemingt"></a>subtree[=<chemin>] </dt> <dd> <p>Cette option est une forme plus avancée de stratégie <em>subtree</em>, où la stratégie fait une estimation de la façon dont deux arbres doivent être déplacés pour correspondre l’un à l’autre lors de la fusion. Au lieu de cela, le chemin spécifié est préfixé (ou tronqué au debut) pour faire correspondre la forme de deux arbres.</p> </dd> </dl> </div> </dd> <dt class="hdlist1" id="git-rebase-recursive"> <a class="anchor" href="#git-rebase-recursive"></a>recursive </dt> <dd> <p>Cela ne peut résoudre que deux têtes en utilisant un algorithme de fusion à trois voies. Lorsqu’il y a plus d’un ancêtre commun qui peut être utilisé pour la fusion à trois, il crée un arbre fusionné des ancêtres communs et l’utilise comme arbre de référence pour la fusion à trois. Il a été rapporté que cela permettait de réduire les conflits de fusion sans provoquer de fausses fusions, grâce à des tests effectués sur de vraies fusions tirées de l’historique de développement du noyau Linux 2.6. En outre, cela permet de détecter et de gérer les fusions impliquant des renommages. Cela n’utilise les copies détectées. C’était la stratégie par défaut lors de la résolution de deux sommets pour Git depuis la version v0.99.9k jusqu’à v2.33.0.</p> <div class="paragraph"> <p>La stratégie <em>recursive</em> utilise les mêmes options que <em>ort</em>. Cependant, il y a trois options supplémentaires que <em>ort</em> ignore (non documentées ci-dessus) et qui sont potentiellement utiles avec la stratégie <em>recursive</em> :</p> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-patience"> <a class="anchor" href="#git-rebase-patience"></a>patience </dt> <dd> <p>Synonyme obsolète pour <code>diff-algorithm=patience</code>.</p> </dd> <dt class="hdlist1" id="git-rebase-diff-algorithmpatienceminimalhistogrammyers"> <a class="anchor" href="#git-rebase-diff-algorithmpatienceminimalhistogrammyers"></a>diff-algorithm=[patience|minimal|histogram|myers] </dt> <dd> <p>Utiliser un algorithme de diff différent lors des fusions, ce qui peut aider à éviter les erreurs de fusion dues à des lignes de correspondance sans importance (comme des accolades de fonctions distinctes). Voir aussi <a href='/docs/git-diff/fr'>git-diff[1]</a> <code>--diff-algorithm</code>. Notez que <code>ort</code> utilise spécifiquement <code>diff-algorithm=histogram</code>, alors que <code>recursive</code> utilise par défaut le paramètre de configuration <code>diff.algorithm</code>.</p> </dd> <dt class="hdlist1" id="git-rebase-no-renames"> <a class="anchor" href="#git-rebase-no-renames"></a>no-renames </dt> <dd> <p>Désactiver la détection de renommage. Ceci annule la variable de configuration <code>merge.renames</code>. Voir aussi <a href='/docs/git-diff/fr'>git-diff[1]</a> <code>--no-renames</code>.</p> </dd> </dl> </div> </dd> <dt class="hdlist1" id="git-rebase-resolve"> <a class="anchor" href="#git-rebase-resolve"></a>resolve </dt> <dd> <p>Cela ne peut résoudre que deux têtes (c’est-à-dire la branche actuelle et une autre branche dont vous avez tiré) en utilisant un algorithme de fusion à trois points. Cela essaie de détecter avec soin les ambiguïtés de la fusion croisée. Les renommages ne sont pas gérés.</p> </dd> <dt class="hdlist1" id="git-rebase-octopus"> <a class="anchor" href="#git-rebase-octopus"></a>octopus </dt> <dd> <p>Cela permet de résoudre les cas à plus de deux têtes, mais refuse de faire une fusion complexe qui nécessite une résolution manuelle. C’est principalement destiné à être utilisé pour regrouper les têtes de branches thématiques. C’est la stratégie de fusion par défaut lorsque l’on tire ou fusionne plusieurs branches.</p> </dd> <dt class="hdlist1" id="git-rebase-ours-1"> <a class="anchor" href="#git-rebase-ours-1"></a>ours </dt> <dd> <p>Cela résout un nombre quelconque de têtes, mais l’arbre résultant de la fusion est toujours celui de la tête de la branche actuelle, ignorant effectivement toutes les modifications provenant de toutes les autres branches. C’est censé être utilisé pour remplacer l’ancienne historique du développement des branches latérales. Notez que cette stratégie est différente de l’option -Xours de la stratégie de fusion <em>recursive</em>.</p> </dd> <dt class="hdlist1" id="git-rebase-subtree"> <a class="anchor" href="#git-rebase-subtree"></a>subtree </dt> <dd> <p>Il s’agit d’une stratégie <code>ort</code> modifiée. Lors de la fusion des arbres A et B, si B correspond à un sous-arbre de A, B est d’abord ajusté pour correspondre à la structure arborescente de A, au lieu de lire les arbres au même niveau. Cet ajustement est également effectué sur l’arbre de l’ancêtre commun.</p> </dd> </dl> </div> <div class="paragraph"> <p>Avec les stratégies qui utilisent la fusion à trois points (y compris la fusion par défaut, <em>ort</em>), si une modification est effectuée sur les deux branches, mais qu’elle est ensuite inversée sur l’une des branches, ce changement sera présent dans le résultat de la fusion ; certaines personnes trouvent ce comportement déroutant. Cela se produit parce que seules les têtes et la base de la fusion sont prises en compte lors d’une fusion, et non le commit individuel. L’algorithme de fusion considère donc le changement inversé comme n’étant pas un changement du tout, et substitue la version modifiée à la place.</p> </div> </div> </div> <div class="sect1"> <h2 id="_notes"><a class="anchor" href="#_notes"></a>NOTES</h2> <div class="sectionbody"> <div class="paragraph"> <p>Vous devriez comprendre les implications de l’utilisation de <code>git rebase</code> sur un dépôt partagé. Voir la section « RATTRAPER UN REBASAGE AMONT » ci-dessous.</p> </div> <div class="paragraph"> <p>Lorsque le rebasage est exécuté, il exécutera d’abord un crochet <code>pre-rebase</code> si il existe. Vous pouvez utiliser ce crochet pour faire des vérifications de santé et rejeter le rebasage si il n’est pas approprié. Veuillez voir le modèle de script crochet`pre-rebase` pour un exemple.</p> </div> <div class="paragraph"> <p>Une fois terminé, <code><branche></code> sera la branche actuelle.</p> </div> </div> </div> <div class="sect1"> <h2 id="_mode_interactif"><a class="anchor" href="#_mode_interactif"></a>MODE INTERACTIF</h2> <div class="sectionbody"> <div class="paragraph"> <p>Rebaser interactivement signifie que vous avez une possibilité de modifier les commits qui sont rebasés. Vous pouvez réordonner les commits, et vous pouvez les supprimer (en éliminant des rustines mauvaises ou autrement indésirables).</p> </div> <div class="paragraph"> <p>Le mode interactif est destiné à ce type de flux de travail :</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>avoir une merveilleuse idée</p> </li> <li> <p>travailler sur le code</p> </li> <li> <p>préparer une série pour propositions</p> </li> <li> <p>proposer</p> </li> </ol> </div> <div class="paragraph"> <p>où le point 2. se compose de plusieurs cas</p> </div> <div class="paragraph"> <p>a) utilisation régulière</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>finir quelque chose digne d’un commit</p> </li> <li> <p>valider</p> </li> </ol> </div> <div class="paragraph"> <p>b) correction indépendante</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>réaliser que quelque chose ne fonctionne pas</p> </li> <li> <p>réparer ça</p> </li> <li> <p>le valider</p> </li> </ol> </div> <div class="paragraph"> <p>Parfois, la chose corrigée en b.2. ne peut pas être ajoutée au commit pas totalement parfait qu’elle corrige, parce que ce commit est enterré profondément dans une série de rustines. C’est exactement ce à quoi le rebasage interactif sert : utilisez-le après beaucoup de "a"s et "b"s, en réorganisant et en éditant des commits, et en combinant plusieurs commits en un.</p> </div> <div class="paragraph"> <p>Commencez avec le dernier commit que vous voulez retenir tel quel :</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase -i <après-ce-commit></pre> </div> </div> <div class="paragraph"> <p>Un éditeur sera démarré avec tous les commits dans votre branche actuelle (en ignorant les commits de fusion), qui viennent après le commit donné. Vous pouvez réorganiser à votre goût les commits dans cette liste, et vous pouvez les supprimer. La liste ressemble plus ou moins à ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre>pick deadbee Le titre de ce commit pick fa1afe1 Le titre du commit suivant ...</pre> </div> </div> <div class="paragraph"> <p>Les titres sont purement pour votre usage ; <em>git rebase</em> ne les regardera pas mais s’appuiera sur les noms de commit («deadbee» et «fa1afe1» dans cet exemple), donc ne supprimez pas ou ne modifiez pas les noms.</p> </div> <div class="paragraph"> <p>En remplaçant la commande "pick" par la commande "edit", vous pouvez dire à <code>git rebase</code> de s’arrêter après l’application de ce commit, afin que vous puissiez modifier les fichiers et/ou le message de validation, modifier le commit, et continuer de rebaser.</p> </div> <div class="paragraph"> <p>Pour interrompre le rebasage (comme une commande "edit" le ferait, mais sans picorer de commit d’abord), utilisez la commande "break".</p> </div> <div class="paragraph"> <p>Si vous voulez simplement modifier le message de validation pour un commit, remplacez la commande "pick" par la commande "reword".</p> </div> <div class="paragraph"> <p>Pour abandonner un commit, remplacer la commande "pick" par "drop", ou supprimez simplement la ligne correspondante.</p> </div> <div class="paragraph"> <p>Si vous voulez replier deux ou plusieurs commits en un, remplacer la commande "pick" pour le second commit et les commits subséquents par "squash" ou "fixup". Si les commits avaient différents auteurs, le commit replié sera attribué à l’auteur du premier commit. Le message de commit proposé pour le commit replié est la concaténation du message du premier commit avec ceux identifiés par les commandes "squash", en omettant les messages de commits identifiés par les commandes "fixup", à moins que "fixup -c" ne soit utilisé. Dans ce cas, le message de validation proposé n’est que le message du commit appliqué par "fixup -c", et un éditeur est ouvert vous permettant de modifier le message. Le contenu (rustine) du commit "fixup -c" sont toujours incorporé dans le commit replié. S’il y a plus d’un commit "fixup -c", le message du dernier est utilisé. Vous pouvez également utiliser "fixup -C" pour obtenir le même comportement que "fixup -c" sauf sans ouvrir un éditeur.</p> </div> <div class="paragraph"> <p><code>git rebase</code> s’arrêtera lorsque "pick" a été remplacé par "edit" ou quand une commande échoue en raison d’erreurs de fusion. Lorsque vous avez terminé l’édition et/ou la résolution des conflits, vous pouvez continuer avec <code>git rebase --continue</code>.</p> </div> <div class="paragraph"> <p>Par exemple, si vous voulez réorganiser les 5 derniers commits, de sorte que ce qui était <code>HEAD~4</code> devient le nouveau <code>HEAD</code>. Pour ce faire, vous appelez <code>git rebase</code> comme ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre>$ git rebase -i HEAD~5</pre> </div> </div> <div class="paragraph"> <p>Et déplacer la première rustine jusqu’à la fin de la liste.</p> </div> <div class="paragraph"> <p>Vous pourriez vouloir recréer des commits de fusion, par exemple si vous avez une histoire comme celle-ci :</p> </div> <div class="listingblock"> <div class="content"> <pre> X \ A---M---B / ---o---O---P---Q</pre> </div> </div> <div class="paragraph"> <p>Supposons que vous voulez rebaser la branche latérale à partir de "A" à "Q". Assurez-vous que la `HEAD`actuelle est "B", et appelez</p> </div> <div class="listingblock"> <div class="content"> <pre>$ git rebase -i -r --onto Q O</pre> </div> </div> <div class="paragraph"> <p>La réorganisation et l’édition des commits créent généralement des étapes intermédiaires non testées. Vous pouvez vérifier que votre édition d’historique n’a rien cassé en exécutant un test, ou au moins en recompilant à des points intermédiaires de l’historique en utilisant la commande "exec" (raccourci "x"). Vous pouvez le faire en créant une liste de todo comme celle-ci :</p> </div> <div class="listingblock"> <div class="content"> <pre>pick deadbee Implement feature XXX fixup f1a5c00 Fix to feature XXX exec make pick c0ffeee The oneline of the next commit edit deadbab The oneline of the commit after exec cd subdir; make test ...</pre> </div> </div> <div class="paragraph"> <p>Le rebasage interactif s’arrêtera quand une commande échouera (c.-à-d. des sorties avec statut non-0) pour vous donner l’occasion de résoudre le problème. Vous pouvez continuer avec <code>git rebase --continue</code>.</p> </div> <div class="paragraph"> <p>La commande "exec" lance la commande dans un shell (la commande par défaut, habituellement /bin/sh), de sorte que vous pouvez utiliser des fonctions de shell (comme "cd", ">", ";" …​). La commande est exécutée de la racine de l’arbre de travail.</p> </div> <div class="listingblock"> <div class="content"> <pre>$ git rebase -i --exec "make test"</pre> </div> </div> <div class="paragraph"> <p>Cette commande vous permet de vérifier que les commits intermédiaires sont compilables. La liste de todo devient ainsi :</p> </div> <div class="listingblock"> <div class="content"> <pre>pick 5928aea one exec make test pick 04d0fda two exec make test pick ba46169 three exec make test pick f4593f9 four exec make test</pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="_découpage_de_commits"><a class="anchor" href="#_découpage_de_commits"></a>DÉCOUPAGE DE COMMITS</h2> <div class="sectionbody"> <div class="paragraph"> <p>En mode interactif, vous pouvez marquer des commits avec l’action "edit". Cependant, cela ne signifie pas nécessairement que <code>git rebase</code> s’attende à ce que le résultat de cette modification soit exactement un commit. En effet, vous pouvez défaire le commit, ou vous pouvez ajouter d’autres commits. Ceci peut être utilisé pour diviser un commit en deux :</p> </div> <div class="ulist"> <ul> <li> <p>Démarrez un rebasage interactif avec <code>git rebase -i <commit></code>, où <em><commit></em> est le commit que vous voulez partager. En fait, toute plage de commits fonctionne, tant qu’elle contient ce commit.</p> </li> <li> <p>Marquez le commit que vous voulez diviser avec l’action "edit".</p> </li> <li> <p>Au moment d’éditer ce commit, exécutez <code>git reset HEAD^</code>. L’effet est que le <code>HEAD</code> est rembobiné d’un cran et que l’index est mis à jour. Cependant, l’arbre de travail reste le même.</p> </li> <li> <p>Maintenant ajoutez les modifications que vous voulez avoir dans le premier commit à l’index . Vous pouvez utiliser <code>git add</code> (possiblement interactivement) ou <code>git gui</code> (ou les deux) pour le faire.</p> </li> <li> <p>Validez l’index actuel avec un message de commit approprié.</p> </li> <li> <p>Répétez les deux dernières étapes jusqu’à ce que votre arbre de travail soit propre.</p> </li> <li> <p>Continuez le rebasage avec <code>git rebase --continue</code>.</p> </li> </ul> </div> <div class="paragraph"> <p>Si vous n’êtes pas absolument sûr que les révisions intermédiaires sont cohérentes (qu’elles compilent, passent la suite de test, etc.) vous devriez utiliser <code>git stash</code> pour remiser les modifications pas encore validées après chaque commit, puis tester, et modifier le commit si des corrections sont nécessaires.</p> </div> </div> </div> <div class="sect1"> <h2 id="_se_rattraper_après_un_rebasage_amont"><a class="anchor" href="#_se_rattraper_après_un_rebasage_amont"></a>SE RATTRAPER APRÈS UN REBASAGE AMONT</h2> <div class="sectionbody"> <div class="paragraph"> <p>Rebaser (ou réécrire sous toute autre forme) une branche sur laquelle d’autres ont basé le travail est une mauvaise idée : quiconque en aval est obligé de réparer manuellement son historique. Cette section explique comment corriger cet état du point de vue de l’aval. La vraie solution, cependant, serait d’éviter de rebaser en amont en premier lieu.</p> </div> <div class="paragraph"> <p>Pour illustrer, supposez que vous êtes dans une situation où quelqu’un développe une branche <em>sous-systeme</em>, et que vous travaillez sur un <em>sujet</em> qui dépend de ce <em>sous-systeme</em>. Vous pourriez finir avec un historique comme suit :</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o---o---o---o master \ o---o---o---o---o sous-systeme \ *---*---* sujet</pre> </div> </div> <div class="paragraph"> <p>Si <em>sous-systeme</em> est rebasé sur <em>master</em>, il se produit ce qui suit :</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o---o---o---o master \ \ o---o---o---o---o o'--o'--o'--o'--o' sous-systeme \ *---*---* sujet</pre> </div> </div> <div class="paragraph"> <p>Si vous continuez maintenant le développement comme d’habitude, et finalement fusionnez <em>sujet</em> à <em>sous-systeme</em>, les commits de <em>sous-systeme</em> resteront dupliquées pour toujours :</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o---o---o---o master \ \ o---o---o---o---o o'--o'--o'--o'--o'--M sous-systeme \ / *---*---*-..........-*--* sujet</pre> </div> </div> <div class="paragraph"> <p>De telles doublons sont généralement mal vus parce qu’ils encombrent l’historique, ce qui le rend plus difficile à suivre. Pour nettoyer, vous devez transplanter les commits sur <em>sujet</em> au nouveau sommet de <em>sous-systeme</em>, c’est-à-dire rebaser <em>sujet</em>. Cela s’applique en cascade : toute personne en aval de <em>sujet</em> est obligée de rebaser aussi, et ainsi de suite !</p> </div> <div class="paragraph"> <p>Il existe deux types de corrections, discutées dans les sections suivantes :</p> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-CasfacileLesmodificationssontlittralementlesmmes"> <a class="anchor" href="#git-rebase-CasfacileLesmodificationssontlittralementlesmmes"></a>Cas facile : Les modifications sont littéralement les mêmes. </dt> <dd> <p>Cela se produit si le rebasage sur <em>sous-systeme</em> était un simple rebasage et n’avait aucun conflit.</p> </dd> <dt class="hdlist1" id="git-rebase-Casdurlesmodificationsnesontpaslesmmes"> <a class="anchor" href="#git-rebase-Casdurlesmodificationsnesontpaslesmmes"></a>Cas dur : les modifications ne sont pas les mêmes. </dt> <dd> <p>Cela se produit si le rebasage sur <em>sous-systeme</em> avait des conflits, ou a utilisé <code>--interactive</code> pour omettre, éditer, écraser, ou corriger des commits ; ou si l’amont a utilisé <code>commit --amend</code> ou <code>reset</code>, ou une commande de réécriture complète de l’historique comme <a href="https://github.com/newren/git-filter-repo"><code>filter-repo</code></a>.</p> </dd> </dl> </div> <div class="sect2"> <h3 id="_le_cas_facile"><a class="anchor" href="#_le_cas_facile"></a>Le cas facile</h3> <div class="paragraph"> <p>Ne fonctionne que si les modifications (IDs de rustines basés sur le contenu des diffs) sur <em>sous-systeme</em> sont littéralement les mêmes avant et après le rebasage fait sur <code>sous-systeme</code>.</p> </div> <div class="paragraph"> <p>Dans ce cas, le correctif est facile car <em>git rebase</em> sait sauter les changements qui sont déjà présents dans le nouvel amont (sauf si <code>--reapply-cherry-picks</code> est appliqué). Donc si vous dîtes (en supposant que vous êtes sur <em>sujet</em>)</p> </div> <div class="listingblock"> <div class="content"> <pre> $ git rebase sous-systeme</pre> </div> </div> <div class="paragraph"> <p>vous terminerez avec l’historique réparé</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o---o---o---o master \ o'--o'--o'--o'--o' sous-systeme \ *---*---* sujet</pre> </div> </div> </div> <div class="sect2"> <h3 id="_le_cas_difficile"><a class="anchor" href="#_le_cas_difficile"></a>Le cas difficile</h3> <div class="paragraph"> <p>Les choses deviennent plus compliquées si les changements de <em>sous-systeme</em> ne correspondent pas exactement à ceux avant le rebasage.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> Tandis qu’une "récupération de cas facile" semble parfois réussir même dans le cas difficile, il peut y avoir des conséquences imprévues. Par exemple, un commit qui a été enlevé via <code>git rebase --interactive</code> sera <strong> ressuscité</strong> ! </td> </tr> </table> </div> <div class="paragraph"> <p>L’idée est de dire manuellement à <code>git rebase</code> "où l’ancien <em>sous-systeme</em> s’est terminé et votre <em>sujet</em> a commencé", c’est-à-dire ce qu’était l’ancienne base de fusion entre eux. Vous devrez trouver un moyen de nommer le dernier commit de l’ancien <em>sous-system</em>, par exemple :</p> </div> <div class="ulist"> <ul> <li> <p>Avec le reflog de <em>sous-system</em> : après <code>git fetch</code>, l’ancien sommet de <em>sous-systeme</em> est à <code>sous-systeme@{1}</code>. Les récupérations subséquentes augmenteront le nombre. (Voir <a href='/docs/git-reflog/fr'>git-reflog[1]</a>.)</p> </li> <li> <p>Par rapport au sommet de <em>sujet</em> : sachant que votre <em>sujet</em> a trois commits, l’ancien sommet de <em>sous-systeme</em> doit être <code>sujet~3</code>.</p> </li> </ul> </div> <div class="paragraph"> <p>Vous pouvez ensuite transplanter l’ancien <code>sous-systeme..sujet</code> au nouveau sommet en disant (pour le cas du reflog, et en supposant que vous êtes déjà sur <em>sujet</em>) :</p> </div> <div class="listingblock"> <div class="content"> <pre> $ git rebase --onto sous-systeme sous-systeme@{1}</pre> </div> </div> <div class="paragraph"> <p>L’effet de bord d’une récupération de « cas difficile » est particulièrement terrible : <em>tout le monde</em> en aval de <em>sujet</em> devra maintenant effectuer une récupération de « cas difficile » aussi !</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="_rebasage_de_fusions"><a class="anchor" href="#_rebasage_de_fusions"></a>REBASAGE DE FUSIONS</h2> <div class="sectionbody"> <div class="paragraph"> <p>La commande de rebasage interactive a été à l’origine conçue pour gérer des séries de rustines individuelles. En tant que tel, il est logique d’exclure les commits de fusion de la liste de todo, car le développeur a peut-être fusionné le <code>master</code> alors qu’il travaillait sur la branche, en attendant de rebaser tous les commits sur <code>master</code> à un moment (en sautant les commits de fusion).</p> </div> <div class="paragraph"> <p>Cependant, il y a des raisons légitimes pour lesquelles un développeur peut vouloir recréer des commits de fusion : garder la structure de la branche (ou « topologie des commit ») lorsqu’il travaille sur plusieurs branches interconnectées.</p> </div> <div class="paragraph"> <p>Dans l’exemple suivant, le développeur travaille sur une branche de sujet qui refactorise la façon dont les boutons sont définis, ainsi que sur une autre branche de sujet qui utilise cette refactorisation pour mettre en œuvre un bouton « Signaler un bug ». La sortie de ‘git log --graph --format=% -5’ peut ressembler à ça :</p> </div> <div class="listingblock"> <div class="content"> <pre>* Merge branch 'report-a-bug' |\ | * Add the feedback button * | Merge branch 'refactor-button' |\ \ | |/ | * Use the Button class for all buttons | * Extract a generic Button class from the DownloadButton one</pre> </div> </div> <div class="paragraph"> <p>Le développeur pourrait vouloir rebaser ces commits sur un nouveau <code>master</code> tout en gardant la topologie de la branche, par exemple lorsque la première branche de sujet devrait être intégrée dans <code>master</code> beaucoup plus tôt que la seconde, par exemple, pour résoudre les conflits de fusion avec des modifications à la classe DownloadButton qui ont déjà été intégrées sur ‘master’.</p> </div> <div class="paragraph"> <p>Ce rebasage peut être effectué en utilisant l’option <code>--rebase-merges</code>. Il générera une liste de todo qui ressemble à ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre>label onto # Branch: refactor-button reset onto pick 123456 Extract a generic Button class from the DownloadButton one pick 654321 Use the Button class for all buttons label refactor-button # Branch: report-a-bug reset refactor-button # Use the Button class for all buttons pick abcdef Add the feedback button label report-a-bug reset onto merge -C a1b2c3 refactor-button # Merge 'refactor-button' merge -C 6f5e4d report-a-bug # Merge 'report-a-bug'</pre> </div> </div> <div class="paragraph"> <p>Contrairement à une base interactive régulière, il y a des commandes <code>label</code>, <code>reset</code> et <code>merge</code> en plus des commandes <code>pick</code>.</p> </div> <div class="paragraph"> <p>La commande <code>label</code> associe une étiquette à la HEAD actuelle lorsque cette commande est exécutée. Ces étiquettes sont créées sous forme de refs local à l’arbre-de-travail (<code>refs/rewritten/<étiquette></code>) qui seront supprimées lorsque le rebasage sera terminé. De cette façon, les opérations de rebasage dans plusieurs arbre-de-travail liés au même dépôt n’interfèrent pas les uns avec les autres. Si la commande <code>label</code> échoue, elle est reprogrammée immédiatement, avec un message indiquant comment procéder.</p> </div> <div class="paragraph"> <p>La commande <code>reset</code> réinitialise la HEAD, l’index et l’abre de travail à la révision spécifiée. Il est semblable à un <code>exec git reset --hard <étiquette></code>, mais refuse d’écraser des fichiers non suivis. Si la commande <code>reset</code> échoue, elle est reprogrammée immédiatement, avec un message indiquant comment modifier la liste de todo (cela arrive généralement quand une commande <code>reset</code> a été insérée dans la liste de todo manuellement et contient une typo).</p> </div> <div class="paragraph"> <p>La commande <code>merge</code> fusionnera la ou les révisions spécifiées dans ce qui est HEAD à ce moment-là. Avec <code>-C <commit-original></code>, le message de validation de la fusion spécifiée sera utilisé. Lorsque le <code>-C</code> est changé en minuscule <code>-c</code>, le message sera ouvert dans un éditeur après une fusion réussie afin que l’utilisateur puisse modifier le message.</p> </div> <div class="paragraph"> <p>Si une commande <code>merge</code> échoue pour toute raison autre que des conflits de fusion (c.-à-d. lorsque l’opération de fusion n’a même pas commencé), elle est reprogrammée immédiatement.</p> </div> <div class="paragraph"> <p>Par défaut, la commande <code>merge</code> utilisera la stratégie de fusion <code>ort</code> pour les fusions normales, et <code>octopus</code> pour les fusions de plusieurs branches. On peut spécifier une stratégie par défaut pour toutes les fusions en utilisant l’argument <code>--strategy</code> lorsqu’on invoque <code>rebase</code>, ou peut remplacer des fusions spécifiques dans la liste interactive des commandes en utilisant une commande <code>exec</code> pour appeler <code>git merge</code> explicitement avec un argument <code>--strategy</code>. Notez que lorsque vous appelez <code>git merge</code> explicitement comme cela, vous pouvez utiliser le fait que les étiquettes sont des réfs sont locales à l’arbre-de-travail (la réf <code>refs/rewritten/onto</code> correspondrait à l`étiquette <code>onto</code>, par exemple) afin de se référer aux branches que vous voulez fusionner.</p> </div> <div class="paragraph"> <p>Note : la première commande (<code>label onto</code>) étiquette la révision sur laquelle les commits sont rebasés ; Le nom <code>onto</code> est juste une convention, comme un référence à l’option <code>--onto</code>.</p> </div> <div class="paragraph"> <p>Il est également possible d’introduire des commits de fusion complètement nouveaux à partir de zéro en ajoutant une commande de la forme <code>merge <tête-de-fusion></code>. Cette forme générera un message de validation provisoire et ouvrira toujours un éditeur pour laisser l’utilisateur l’éditer. Cela peut être utile, par exemple lorsqu’une branche de sujet traite plus d’un seul problème et doit être divisée en deux branches de thème ou plus. Considérez cette liste de todo :</p> </div> <div class="listingblock"> <div class="content"> <pre>pick 192837 Switch from GNU Makefiles to CMake pick 5a6c7e Document the switch to CMake pick 918273 Fix detection of OpenSSL in CMake pick afbecd http: add support for TLS v1.3 pick fdbaec Fix detection of cURL in CMake on Windows</pre> </div> </div> <div class="paragraph"> <p>Le seul commit de cette liste qui n’est pas lié à CMake peut très bien avoir été motivé par le travail sur la correction de tous ces bugs introduits en passant à CMake, mais il répond à une préoccupation différente. Pour diviser cette branche en deux branches thématiques, la liste de todo pourrait être modifiée comme ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre>label onto pick afbecd http: add support for TLS v1.3 label tlsv1.3 reset onto pick 192837 Switch from GNU Makefiles to CMake pick 918273 Fix detection of OpenSSL in CMake pick fdbaec Fix detection of cURL in CMake on Windows pick 5a6c7e Document the switch to CMake label cmake reset onto merge tlsv1.3 merge cmake</pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="_configuration"><a class="anchor" href="#_configuration"></a>CONFIGURATION</h2> <div class="sectionbody"> <div class="paragraph"> <p>Tout ce qui se trouve en dessous de cette ligne dans cette section est inclus de manière sélective à partir de la documentation <a href='/docs/git-config/fr'>git-config[1]</a>. Le contenu est le même que celui qui s’y trouve :</p> </div> <div class="admonitionblock warning"> <table> <tr> <td class="icon"> <div class="title">Warning</div> </td> <td class="content"> <div class="paragraph"> <p>Missing <code>fr/config/rebase.adoc</code></p> </div> <div class="paragraph"> <p>See original version for this content.</p> </div> </td> </tr> </table> </div> <div class="admonitionblock warning"> <table> <tr> <td class="icon"> <div class="title">Warning</div> </td> <td class="content"> <div class="paragraph"> <p>Missing <code>fr/config/sequencer.adoc</code></p> </div> <div class="paragraph"> <p>See original version for this content.</p> </div> </td> </tr> </table> </div> </div> </div> <div class="sect1"> <h2 id="_git"><a class="anchor" href="#_git"></a>GIT</h2> <div class="sectionbody"> <div class="paragraph"> <p>Fait partie de la suite <a href='/docs/git/fr'>git[1]</a></p> </div> </div> </div> <div class="sect1"> <h2 id="_traduction"><a class="anchor" href="#_traduction"></a>TRADUCTION</h2> <div class="sectionbody"> <div class="paragraph"> <p>Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site <a href="https://github.com/jnavila/git-manpages-l10n" class="bare">https://github.com/jnavila/git-manpages-l10n</a> .</p> </div> </div> </div> </div> </div> </div> <footer> <div class="site-source"> <a href="/site">About this site</a><br> Patches, suggestions, and comments are welcome. </div> <div class="sfc-member"> Git is a member of <a href="/sfc">Software Freedom Conservancy</a> </div> </footer> <a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top"> <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/> </a> <script src="/js/jquery-1.7.1.min.js"></script> <script src="/js/jquery-ui-1.8.18.custom.min.js"></script> <script src="/js/jquery.defaultvalue.js"></script> <script src="/js/session.min.js"></script> <script src="/js/modernizr.js"></script> <script src="/js/modernize.js"></script> <script src="/js/application.min.js"></script> </div> </body> </html>