CINXE.COM
Git - git-rebase Documentation
<!DOCTYPE html> <html lang="pt_BR"> <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="#"> Português (Brasil) ▾</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/pt_BR"> git </a> </li> <li> <a href="/docs/git-config/pt_BR"> config </a> </li> <li> <a href="/docs/git-help/pt_BR"> help </a> </li> <li> <a href="/docs/git-bugreport/pt_BR"> 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/pt_BR"> init </a> </li> <li> <a href="/docs/git-clone/pt_BR"> clone </a> </li> </ul> <h3 class='snapshotting'>Basic Snapshotting</h3> <ul class='unstyled'> <li> <a href="/docs/git-add/pt_BR"> add </a> </li> <li> <a href="/docs/git-status/pt_BR"> status </a> </li> <li> <a href="/docs/git-diff/pt_BR"> diff </a> </li> <li> <a href="/docs/git-commit/pt_BR"> commit </a> </li> <li> <a href="/docs/git-notes/pt_BR"> notes </a> </li> <li> <a href="/docs/git-restore/pt_BR"> restore </a> </li> <li> <a href="/docs/git-reset/pt_BR"> reset </a> </li> <li> <a href="/docs/git-rm/pt_BR"> rm </a> </li> <li> <a href="/docs/git-mv/pt_BR"> mv </a> </li> </ul> <h3 class='branching'>Branching and Merging</h3> <ul class='unstyled'> <li> <a href="/docs/git-branch/pt_BR"> branch </a> </li> <li> <a href="/docs/git-checkout/pt_BR"> checkout </a> </li> <li> <a href="/docs/git-switch/pt_BR"> switch </a> </li> <li> <a href="/docs/git-merge/pt_BR"> merge </a> </li> <li> <a href="/docs/git-mergetool/pt_BR"> mergetool </a> </li> <li> <a href="/docs/git-log/pt_BR"> log </a> </li> <li> <a href="/docs/git-stash/pt_BR"> stash </a> </li> <li> <a href="/docs/git-tag/pt_BR"> tag </a> </li> <li> <a href="/docs/git-worktree/pt_BR"> worktree </a> </li> </ul> <h3 class='sharing'>Sharing and Updating Projects</h3> <ul class='unstyled'> <li> <a href="/docs/git-fetch/pt_BR"> fetch </a> </li> <li> <a href="/docs/git-pull/pt_BR"> pull </a> </li> <li> <a href="/docs/git-push/pt_BR"> push </a> </li> <li> <a href="/docs/git-remote/pt_BR"> remote </a> </li> <li> <a href="/docs/git-submodule/pt_BR"> 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/pt_BR"> show </a> </li> <li> <a href="/docs/git-log/pt_BR"> log </a> </li> <li> <a href="/docs/git-diff/pt_BR"> diff </a> </li> <li> <a href="/docs/git-difftool/pt_BR"> difftool </a> </li> <li> <a href="/docs/git-range-diff/pt_BR"> range-diff </a> </li> <li> <a href="/docs/git-shortlog/pt_BR"> shortlog </a> </li> <li> <a href="/docs/git-describe/pt_BR"> describe </a> </li> </ul> <h3 class='patching'>Patching</h3> <ul class='unstyled'> <li> <a href="/docs/git-apply/pt_BR"> apply </a> </li> <li> <a href="/docs/git-cherry-pick/pt_BR"> cherry-pick </a> </li> <li> <a href="/docs/git-diff/pt_BR"> diff </a> </li> <li> <a href="/docs/git-rebase/pt_BR"> rebase </a> </li> <li> <a href="/docs/git-revert/pt_BR"> revert </a> </li> </ul> <h3 class='debugging'>Debugging</h3> <ul class='unstyled'> <li> <a href="/docs/git-bisect/pt_BR"> bisect </a> </li> <li> <a href="/docs/git-blame/pt_BR"> blame </a> </li> <li> <a href="/docs/git-grep/pt_BR"> grep </a> </li> </ul> <h3 class='email'>Email</h3> <ul class='unstyled'> <li> <a href="/docs/git-am/pt_BR"> am </a> </li> <li> <a href="/docs/git-apply/pt_BR"> apply </a> </li> <li> <a href="/docs/git-format-patch/pt_BR"> format-patch </a> </li> <li> <a href="/docs/git-send-email/pt_BR"> send-email </a> </li> <li> <a href="/docs/git-request-pull/pt_BR"> request-pull </a> </li> </ul> <h3 class='external'>External Systems</h3> <ul class='unstyled'> <li> <a href="/docs/git-svn/pt_BR"> svn </a> </li> <li> <a href="/docs/git-fast-import/pt_BR"> fast-import </a> </li> </ul> <h3 class='server-admin'>Server Admin</h3> <ul class='unstyled'> <li> <a href="/docs/git-daemon/pt_BR"> daemon </a> </li> <li> <a href="/docs/git-update-server-info/pt_BR"> 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/pt_BR"> Glossary </a> </li> <li> <a href="/docs/githooks"> Hooks </a> </li> <li> <a href="/docs/gitignore/pt_BR"> 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/pt_BR"> clean </a> </li> <li> <a href="/docs/git-gc/pt_BR"> gc </a> </li> <li> <a href="/docs/git-fsck/pt_BR"> fsck </a> </li> <li> <a href="/docs/git-reflog/pt_BR"> reflog </a> </li> <li> <a href="/docs/git-filter-branch/pt_BR"> filter-branch </a> </li> <li> <a href="/docs/git-instaweb/pt_BR"> instaweb </a> </li> <li> <a href="/docs/git-archive/pt_BR"> archive </a> </li> <li> <a href="/docs/git-bundle/pt_BR"> bundle </a> </li> </ul> <h3 class='plumbing'>Plumbing Commands</h3> <ul class='unstyled'> <li> <a href="/docs/git-cat-file/pt_BR"> cat-file </a> </li> <li> <a href="/docs/git-check-ignore/pt_BR"> check-ignore </a> </li> <li> <a href="/docs/git-checkout-index/pt_BR"> checkout-index </a> </li> <li> <a href="/docs/git-commit-tree/pt_BR"> commit-tree </a> </li> <li> <a href="/docs/git-count-objects/pt_BR"> count-objects </a> </li> <li> <a href="/docs/git-diff-index/pt_BR"> diff-index </a> </li> <li> <a href="/docs/git-for-each-ref/pt_BR"> for-each-ref </a> </li> <li> <a href="/docs/git-hash-object/pt_BR"> hash-object </a> </li> <li> <a href="/docs/git-ls-files/pt_BR"> ls-files </a> </li> <li> <a href="/docs/git-ls-tree/pt_BR"> ls-tree </a> </li> <li> <a href="/docs/git-merge-base/pt_BR"> merge-base </a> </li> <li> <a href="/docs/git-read-tree/pt_BR"> read-tree </a> </li> <li> <a href="/docs/git-rev-list/pt_BR"> rev-list </a> </li> <li> <a href="/docs/git-rev-parse/pt_BR"> rev-parse </a> </li> <li> <a href="/docs/git-show-ref/pt_BR"> show-ref </a> </li> <li> <a href="/docs/git-symbolic-ref/pt_BR"> symbolic-ref </a> </li> <li> <a href="/docs/git-update-index/pt_BR"> update-index </a> </li> <li> <a href="/docs/git-update-ref/pt_BR"> update-ref </a> </li> <li> <a href="/docs/git-verify-pack/pt_BR"> verify-pack </a> </li> <li> <a href="/docs/git-write-tree/pt_BR"> 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="_nome"><a class="anchor" href="#_nome"></a>NOME</h2> <div class="sectionbody"> <div class="paragraph"> <p>git-rebase - Reaplique os commits em cima do topo de outra base</p> </div> </div> </div> <div class="sect1"> <h2 id="_resumo"><a class="anchor" href="#_resumo"></a>RESUMO</h2> <div class="sectionbody"> <div class="verseblock"> <pre class="content"><em>git rebase</em> [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase> | --keep-base] [<upstream> [<branch>]] <em>git rebase</em> [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>] --root [<branch>] <em>git rebase</em> (--continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)</pre> </div> </div> </div> <div class="sect1"> <h2 id="_descrição"><a class="anchor" href="#_descrição"></a>DESCRIÇÃO</h2> <div class="sectionbody"> <div class="paragraph"> <p>Se o <code><ramo></code> for especificado, o <code>git rebase</code> executará um <code>git switch <ramo></code> automático antes de fazer qualquer outra coisa. Caso contrário, ele permanecerá no ramo atual.</p> </div> <div class="paragraph"> <p>Se o <code><upstream></code> não for especificado, será utilizado o "upstream" configurado nas opções <code>branch.<nome>.remote</code> e <code>branch.<nome>.merge</code> (para mais detalhes consulte <a href='/docs/git-config/pt_BR'>git-config[1]</a>) e a opção <code>--fork-point</code> será assumida. Se você não estiver em nenhuma ramificação no momento ou se a ramificação atual não tiver um "upstream" configurado, o rebase será abortado.</p> </div> <div class="paragraph"> <p>Todas as alterações feitas por commits no ramo atual, mas que não estão no <code><upstream></code>, são salvos numa área temporária. Esse é o mesmo conjunto de commits que seria exibido pelo comando <code>git log <upstream>..HEAD</code>; ou pelo comando <code>git log 'fork_point'..HEAD</code>, se a opção <code>--fork-point</code> estiver ativa (consulte abaixo a descrição sobre a opção <code>--fork-point</code>); ou pelo <code>git log HEAD</code>, caso a opção <code>--root</code> seja usada.</p> </div> <div class="paragraph"> <p>O ramo atual é redefinido para <code><upstream></code> ou <code><newbase></code> caso a opção <code>--onto</code> tenha sido usada. Isso tem exatamente o mesmo efeito que <code>git reset --hard <upstream></code> (ou <code><newbase></code>). O <code>ORIG_HEAD</code> é definido para apontar para o cume do ramo antes da reinicialização.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> Não é garantido que <code>ORIG_HEAD</code> ainda aponte para o cume de uma ramificação anterior no final do "rebase" caso os outros comandos que escrevem essa pseudo-ref (<code>git reset</code> por exemplo) sejam usados durante o "rebase". O cume da ramificação anterior, no entanto, é acessível usando o "reflog" da ramificação atual (ou seja, <code>@{1}</code>, consulte <a href='/docs/gitrevisions/pt_BR'>gitrevisions[7]</a>). </td> </tr> </table> </div> <div class="paragraph"> <p>Os commits que foram salvos anteriormente na área temporária são reaplicadas no ramo atual, uma por uma e em ordem. Observe que quaisquer commits no <code>HEAD</code> que introduzam as mesmas alterações textuais que um commit no <code>HEAD..<upstream></code> são omitidas (ou seja, um patch já aceito na inicial com uma mensagem de commit ou carimbo de data e hora diferente, serão ignorados).</p> </div> <div class="paragraph"> <p>É possível que uma falha na mesclagem impeça que este processo seja totalmente automático. Você terá que resolver qualquer falha na mesclagem e executar o comando <code>git rebase --continue</code>. Outra opção é ignorar o commit que causou a falha na mesclagem com comando <code>git rebase --skip</code>. Para verificar o <code><ramo></code> original e remover os arquivos de trabalho <code>.git/rebase-apply</code>, use o comando <code>git rebase --abort</code>.</p> </div> <div class="paragraph"> <p>Suponha que o seguinte histórico exista e que o ramo atual seja "topic":</p> </div> <div class="listingblock"> <div class="content"> <pre> A---B---C topic / D---E---F---G master</pre> </div> </div> <div class="paragraph"> <p>A partir deste ponto, o resultado de um dos seguintes comandos:</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase master git rebase master topic</pre> </div> </div> <div class="paragraph"> <p>seria:</p> </div> <div class="listingblock"> <div class="content"> <pre> A'--B'--C' topic / D---E---F---G master</pre> </div> </div> <div class="paragraph"> <p><strong>OBSERVAÇÃO:</strong> A última maneira é apenas uma abreviação do comando <code>git checkout topic</code> seguido de <code>git rebase master</code>. Quando o "rebase" for encerrado, o <code>topic</code> continuará sendo o ramo com o check-out.</p> </div> <div class="paragraph"> <p>Se o ramo "upstream" já tiver uma alteração que você fez (porque você enviou uma correção que foi aplicado no "upstream" por exemplo), este commit será ignorado e serão emitidos avisos (se o backend <em>merge</em> for usado). Por exemplo, executar o comando <code>git rebase master</code> no seguinte histórico (onde <code>A'</code> e <code>A</code> introduzem o mesmo conjunto de alterações, mas têm informações diferentes de quem fez o commit):</p> </div> <div class="listingblock"> <div class="content"> <pre> A---B---C topic / D---E---A'---F master</pre> </div> </div> <div class="paragraph"> <p>vai resultar em:</p> </div> <div class="listingblock"> <div class="content"> <pre> B'---C' topic / D---E---A'---F master</pre> </div> </div> <div class="paragraph"> <p>Aqui está como você transplantaria um ramo do tópico com base num ramo para outro, para fingir que você bifurcou o ramo do tópico deste último ramo, utilizando <code>rebase --onto</code>.</p> </div> <div class="paragraph"> <p>Primeiro, vamos supor que seu <em>tópico</em> tenha como base o ramo <em>next</em>. Por exemplo, um recurso desenvolvido no <em>tópico</em> depende de alguma funcionalidade encontrada em <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>Queremos criar um <em>tópico</em> bifurcado no ramo <em>master</em>; porque a funcionalidade da qual o <em>tópico</em> depende foi mesclado na ramificação <em>master</em> mais estável. Queremos que a nossa árvore fique assim:</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o master | \ | o'--o'--o' topic \ o---o---o---o---o next</pre> </div> </div> <div class="paragraph"> <p>Podemos conseguir isso utilizando o seguinte comando:</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --onto master next topic</pre> </div> </div> <div class="paragraph"> <p>Outro exemplo da opção <code>--onto</code> é fazer o rebase de uma parte de um ramo. Se tivermos a seguinte situação:</p> </div> <div class="listingblock"> <div class="content"> <pre> H---I---J topicB / E---F---G topicA / A---B---C---D master</pre> </div> </div> <div class="paragraph"> <p>então o comando</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --onto master topicA topicB</pre> </div> </div> <div class="paragraph"> <p>resultaria em:</p> </div> <div class="listingblock"> <div class="content"> <pre> H'--I'--J' topicB / | E---F---G topicA |/ A---B---C---D master</pre> </div> </div> <div class="paragraph"> <p>É útil quando o <em>topicB</em> não depender do <em>topicA</em>.</p> </div> <div class="paragraph"> <p>Uma série de commits também pode ser removida com o rebase. Se tivermos a seguinte situação:</p> </div> <div class="listingblock"> <div class="content"> <pre> E---F---G---H---I---J topicA</pre> </div> </div> <div class="paragraph"> <p>então o comando</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --onto topicA~5 topicA~3 topicA</pre> </div> </div> <div class="paragraph"> <p>resultaria na remoção dos commits <em>F</em> e <em>G</em>:</p> </div> <div class="listingblock"> <div class="content"> <pre> E---H'---I'---J' topicA</pre> </div> </div> <div class="paragraph"> <p>Isso é útil se F e G tiverem alguma falha ou não devam fazer parte do "topicA". Observe que o argumento para a opção <code>--onto</code> e o parâmetro <code><upstream></code> podem ser qualquer tipo válido de commit.</p> </div> <div class="paragraph"> <p>Em caso de conflito, o comando <code>git rebase</code> encerrará no primeiro commit problemático e deixará marcadores de conflito na árvore. Você pode usar o comando <code>git diff</code> para localizar os marcadores (<<<<<<) e fazer as edições para resolver o conflito. Para cada arquivo editado, você precisa informar ao Git que o conflito foi resolvido; normalmente, isso seria feito com</p> </div> <div class="literalblock"> <div class="content"> <pre>git add <nome-do-arquivo></pre> </div> </div> <div class="paragraph"> <p>Depois de resolver o conflito manualmente e atualizar o índice com a resolução desejada, você pode continuar o processo de reconstrução com o comando</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --continue</pre> </div> </div> <div class="paragraph"> <p>Como alternativa, você pode desfazer o <em>git rebase</em> com</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase --abort</pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="_mais_opções"><a class="anchor" href="#_mais_opções"></a>MAIS OPÇÕES</h2> <div class="sectionbody"> <div class="paragraph"> <p>As opções nesta seção, não podem ser usadas com nenhuma outra opção, inclusive entre si:</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>Reinicie o processo de reformulação após resolver um conflito de mesclagem.</p> </dd> <dt class="hdlist1" id="git-rebase---skip"> <a class="anchor" href="#git-rebase---skip"></a>--skip </dt> <dd> <p>Reinicie o processo de reconstrução da fundação ignorando o patch atual.</p> </dd> <dt class="hdlist1" id="git-rebase---abort"> <a class="anchor" href="#git-rebase---abort"></a>--abort </dt> <dd> <p>Interrompa a operação de reconstrução da fundação e redefina o <code>HEAD</code> para o ramo original. Caso <code><ramo></code> seja informado quando a operação de reconstrução da fundação seja iniciada, o <code>HEAD</code> será redefinido para <code><ramo></code>. Caso contrário, o <code>HEAD</code> será redefinido para onde estava quando a operação de reconstrução foi iniciada.</p> </dd> <dt class="hdlist1" id="git-rebase---quit"> <a class="anchor" href="#git-rebase---quit"></a>--quit </dt> <dd> <p>Interrompa a operação de reconstrução, porém o <code>HEAD</code> não será redefinido para o ramo original. Como resultado, o índice e a árvore de trabalho também permanecem inalterados. Caso uma entrada temporária "stash" seja criada utilizando <code>--autostash</code>, ela será salva na lista "stash".</p> </dd> <dt class="hdlist1" id="git-rebase---edit-todo"> <a class="anchor" href="#git-rebase---edit-todo"></a>--edit-todo </dt> <dd> <p>Edite a lista de tarefas durante uma nova reconstrução interativa.</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>Exiba o patch atual numa nova recuperação interativa ou quando a nova recuperação for interrompida por causa de conflitos. É o equivalente ao <code>git show REBASE_HEAD</code>.</p> </dd> </dl> </div> </div> </div> <div class="sect1"> <h2 id="_opções"><a class="anchor" href="#_opções"></a>OPÇÕES</h2> <div class="sectionbody"> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase---ontoltnova-basegt"> <a class="anchor" href="#git-rebase---ontoltnova-basegt"></a>--onto <nova-base> </dt> <dd> <p>Ponto de partida para a criação de novos commits. Se a opção <code>--onto</code> não for usada, o ponto de partida será <code><upstream></code>. Pode ser qualquer commit válido, e não apenas um nome já existente do ramo.</p> <div class="paragraph"> <p>Como um caso especial, você pode utilizar "A...B" como um atalho para a base de mesclagem <em>A</em> e <em>B</em> caso haja exatamente uma base para mesclagem. Você pode deixar de fora no máximo um de <em>A</em> e <em>B</em>; nesse caso, a predefinição retorna para <code>HEAD</code>.</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>Defina o ponto de partida para criar os novos commits para a mesclagem base do <code><upstream></code> e <code><ramo></code>. Executando o comando <code>git rebase --keep-base <upstream> <ramo></code> é o mesmo que executar o comando <code>git rebase --reapply-cherry-picks --no-fork-point --onto <upstream>...<ramo> <upstream> <ramo></code>.</p> <div class="paragraph"> <p>Esta opção é útil no caso onde se está desenvolvendo um recurso em cima de um ramo <em>upstream</em>. Enquanto o recurso está sendo trabalhado, o ramo <em>upstream</em> pode avançar e talvez não seja a melhor ideia continuar reconstruindo no topo do <em>upstream</em>, porém manter a base do commit como está. Como a base do commit permanece inalterado, esta opção implica no uso da opção <code>--reapply-cherry-picks</code> para evitar a perda dos commits.</p> </div> <div class="paragraph"> <p>Embora esta opção e o <code>--fork-point</code> encontrem a base da mesclagem entre <code><upstream></code> e <code><ramo></code>, esta opção utiliza a base da mesclagem como o <em>ponto inicial</em> onde os novos commits serão criados, enquanto <code>--fork-point</code> utiliza a mesclagem da base para determinar o <em>conjunto dos commits</em> que serão reconstruídos.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</p> </div> </dd> <dt class="hdlist1" id="git-rebase-ltupstreamgt"> <a class="anchor" href="#git-rebase-ltupstreamgt"></a><upstream> </dt> <dd> <p>O ramo upstream para fazer comparação. Pode ser qualquer commit válido, e não apenas um nome já existente do ramo. A predefinição retorna ao upstream configurado para a ramificação atual.</p> </dd> <dt class="hdlist1" id="git-rebase-ltramogt"> <a class="anchor" href="#git-rebase-ltramogt"></a><ramo> </dt> <dd> <p>Ramo de trabalho; A predefinição retorna para <code>HEAD</code>.</p> </dd> <dt class="hdlist1" id="git-rebase---apply"> <a class="anchor" href="#git-rebase---apply"></a>--apply </dt> <dd> <p>Use estratégias de aplicação para fazer o rebase (invocando o comando <code>git-am</code> internamente). Esta opção pode se tornar inútil no futuro, uma vez que o backend da mesclagem lida com tudo o que o backend de aplicação faz.</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>How to handle commits that are not empty to start and are not clean cherry-picks of any upstream commit, but which become empty after rebasing (because they contain a subset of already upstream changes):</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>The commit will be dropped. This is the default behavior.</p> </dd> <dt class="hdlist1" id="git-rebase-codekeepcode"> <a class="anchor" href="#git-rebase-codekeepcode"></a><code>keep</code> </dt> <dd> <p>The commit will be kept. This option is implied when <code>--exec</code> is specified unless <code>-i</code>/<code>--interactive</code> is also specified.</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>The rebase will halt when the commit is applied, allowing you to choose whether to drop it, edit files more, or just commit the empty changes. This option is implied when <code>-i</code>/<code>--interactive</code> is specified. <code>ask</code> is a deprecated synonym of <code>stop</code>.</p> </dd> </dl> </div> </div> </div> <div class="paragraph"> <p>Observe que, os commits que começam vazios são mantidos (a menos que a opção <code>--no-keep-empty</code> seja utilizado) e os commits que são escolhas limpas (conforme determinado pelo comando <code>git log --cherry-mark ...</code>) são detectados e descartados como uma etapa preliminar (a menos que a opção <code>--reapply-cherry-picks</code> ou <code>--keep-base</code> seja utilizado).</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Não mantenha os commits que começam vazios antes do rebase (ou seja, que não alteram nada em relação ao commit principal) no resultado. A predefinição é manter os commits que começam vazios, uma vez que a criação de tais commits requer o uso da opção de substituição <code>--allow-empty</code> para o comando <code>git commit</code>, o que significa que um usuário está intencionalmente criando tal commit e, portanto, deseja mantê-lo.</p> <div class="paragraph"> <p>O uso desta opção é provavelmente raro, uma vez que você pode se livrar dos commits que começam vazios simplesmente iniciando um rebase interativo e removendo as linhas correspondentes aos commits que não deseja. Esta opção existe como um atalho conveniente, como nos casos onde as ferramentas externas geram muitos commits vazios e você deseja que todos sejam removidos.</p> </div> <div class="paragraph"> <p>Para os commits que não começam vazios, mas ficam vazios após o <em>rebase</em>, consulte a opção <code>--empty</code>.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Reaplique todas as escolhas seletivas que estejam limpas de qualquer commit "upstream" em vez inviabilizá-los por completo. (Então, caso estes commits se tornem vazios depois da reconstrução, por conter um subconjunto de alterações da "upstream", o comportamento em direção à eles é controlado através da opção <code>--empty</code>.)</p> <div class="paragraph"> <p>Na ausência da opção <code>--keep-base</code> (ou se <code>--no-reapply-cherry-picks</code> for usado), estes commits serão automaticamente descartados. Como isso exige a leitura de todos os commits "upstream", pode acabar saindo caro em repositórios com uma grande quantidade de commits "upstream" que precisam ser lidos. Ao usar o backend <em>merge</em>, serão emitidos avisos para cada commit descartado (a menos que a opção <code>--quiet</code> seja usada). O aviso também será emitido a menos que <code>advice.skippedCherryPicks</code> esteja definido como falso (consulte <a href='/docs/git-config/pt_BR'>git-config[1]</a>).</p> </div> <div class="paragraph"> <p>A opção <code>--reapply-cherry-picks</code> permite que a reconstrução anteceda a leitura de todos os commits "upstream", melhorando muito o desempenho.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Não operacional (no-op). O rebase dos commits com uma mensagem vazia costumava falhar e esta opção substituiria esse comportamento, permitindo o rebase dos commits com mensagens vazias. Agora, os commits com uma mensagem vazia não causam a interrupção do rebase.</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Usando estratégias de mesclagem para o rebase (padrão).</p> <div class="paragraph"> <p>Observe que uma mesclagem rebase funciona reproduzindo cada commit do ramo de trabalho sobre o ramo <code><upstream></code>. Por esse motivo, quando ocorre um conflito de mesclagem, o lado relatado como "nosso" é a série até então refeita, começando com <code><upstream></code>, e o "deles" é o ramo de trabalho. Em outras palavras, os lados são trocados.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--sltestratgiagt"> <a class="anchor" href="#git-rebase--sltestratgiagt"></a>-s <estratégia> </dt> <dt class="hdlist1" id="git-rebase---strategyltestratgiagt"> <a class="anchor" href="#git-rebase---strategyltestratgiagt"></a>--strategy=<estratégia> </dt> <dd> <p>Usa a estratégia de mesclagem fornecida, em vez da predefinição <code>ort</code>. Implica no uso da opção <code>--merge</code>.</p> <div class="paragraph"> <p>Como o <code>git rebase</code> repete cada commit do ramo de trabalho no cume do ramo <upstream> utilizando a estratégia informada, o uso da <code>nossa</code> estratégia simplesmente esvazia todos os patches do <code><ramo></code>, que faz pouco sentido.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</p> </div> </dd> <dt class="hdlist1" id="git-rebase--Xltopo-da-estratgiagt"> <a class="anchor" href="#git-rebase--Xltopo-da-estratgiagt"></a>-X <opção-da-estratégia> </dt> <dt class="hdlist1" id="git-rebase---strategy-optionltopo-da-estratgiagt"> <a class="anchor" href="#git-rebase---strategy-optionltopo-da-estratgiagt"></a>--strategy-option=<opção-da-estratégia> </dt> <dd> <p>Encaminhe a <opção-da-estratégia> para a estratégia de mesclagem. Implica no uso da opção <code>--merge</code> e, se nenhuma estratégia tiver sido especificada, a predefinição é <code>-s ort</code>. Observe a inversão de <em>ours</em> (nosso) e <em>theirs</em> (deles), conforme observado acima para a opção <code>-m</code>.</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Depois que o mecanismo <em>rerere</em> reutilizar uma resolução registrada no conflito atual para atualizar os arquivos na árvore de trabalho, permita que ele também atualize o índice com o resultado da resolução. A opção <code>--no-rerere-autoupdate</code> é uma boa maneira de verificar novamente o que o <code>rerere</code> fez e detectar possíveis erros de mesclagem, antes de fazer o commit resultante no índice com um comando <code>git add</code> separado.</p> </dd> </dl> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase--Sltkeyidgt"> <a class="anchor" href="#git-rebase--Sltkeyidgt"></a>-S[<keyid>] </dt> <dt class="hdlist1" id="git-rebase---gpg-signltkeyidgt"> <a class="anchor" href="#git-rebase---gpg-signltkeyidgt"></a>--gpg-sign[=<keyid>] </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>Commits assinados com o GPG O argumento <code>keyid</code> é opcional e a predefinição retorna para a identidade de quem fez o commit; caso seja utilizado, deve estar anexado a opção e sem espaço. A opção <code>--no-gpg-sign</code> é útil para revogar a variável de configuração <code>commit.gpgSign</code> e a anterior <code>--gpg-sign</code>.</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>Fique em silêncio. Implica no uso da opção <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>Seja loquaz. Implica no uso de <code>--stat</code>.</p> </dd> <dt class="hdlist1" id="git-rebase---stat"> <a class="anchor" href="#git-rebase---stat"></a>--stat </dt> <dd> <p>Exiba uma descrição do que mudou na upstream desde a última reconstrução (rebase). O diffstat também é controlado pela opção de configuração <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>Não mostre um "diffstat" como parte do processo de reconstrução da fundação (rebase).</p> </dd> <dt class="hdlist1" id="git-rebase---no-verify"> <a class="anchor" href="#git-rebase---no-verify"></a>--no-verify </dt> <dd> <p>Essa opção ignora o gancho rebase prévio. Consulte também <a href='/docs/githooks/pt_BR'>githooks[5]</a>.</p> </dd> <dt class="hdlist1" id="git-rebase---verify"> <a class="anchor" href="#git-rebase---verify"></a>--verify </dt> <dd> <p>Permite que o hook rebase prévio seja executado, que é a predefinição. Essa opção pode ser usada para substituir a opção <code>--no-verify</code>. Consulte também <a href='/docs/githooks/pt_BR'>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>Certifique-se de que pelo menos <code><n></code> linhas do contexto circundante correspondam antes e após cada alteração. Quando houver menos linhas de contexto ao redor, todas elas devem corresponder. É predefinido que nenhum contexto seja ignorado. Implica no uso da opção <code>--apply</code>.</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Reproduz individualmente todos os commits refeitos em vez de avançar rapidamente sobre os que estiverem inalterados. Isso garante que todo o histórico da ramificação refeita através do "rebase" seja composto de novos commits.</p> <div class="paragraph"> <p>Pode ser útil após reverter uma mesclagem do ramo "topic", pois esta opção recria o ramo "topic" com os novos commits, para que possa ser recuperado com êxito sem precisar "reverter a reversão" (para mais detalhes, consulte o <a href="/docs/howto/revert-a-faulty-merge/pt_BR">Como reverter uma falha da mesclagem</a>).</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>Utilize reflog para encontrar um ancestral comum melhor entre a <code><upstream></code> e o <code><ramo></code> ao calcular quais os commits foram introduzidos pelo <code><ramo></code>.</p> <div class="paragraph"> <p>Quando a opção <code>--fork-point</code> estiver ativa, o <em>fork_point</em> será utilizado em vez do <code><upstream></code> para calcular o conjunto de commits que serão refeitos via "rebase", onde o <em>fork_point</em> é o resultado do comando <code>git merge-base --fork-point <upstream> <ramo></code> (consulte <a href='/docs/git-merge-base/pt_BR'>git-merge-base[1]</a>). Se o <em>fork_point</em> estiver vazio, o <code><upstream></code> será usado como contingência.</p> </div> <div class="paragraph"> <p>Caso a <code><upstream></code> ou a opção <code>--keep-base</code> seja utilizada na linha de comando, a predefinição será <code>--no-fork-point</code>, caso contrário, a predefinição será <code>--fork-point</code>. Consulte também <code>rebase.forkpoint</code> em <a href='/docs/git-config/pt_BR'>git-config[1]</a>.</p> </div> <div class="paragraph"> <p>Caso o seu ramo teve como base no <code><upstream></code>, porém <code><upstream></code> foi retrocedido e o seu ramo contém commits que foram eliminados, esta opção pode ser utilizada com a opção <code>--keep-base</code> para eliminar estes commits do seu ramo.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Ignore as diferenças dos espaços ao tentar reconciliar as diferenças. Atualmente, cada estrutura implementa uma aproximação deste comportamento:</p> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-aplicaobackend"> <a class="anchor" href="#git-rebase-aplicaobackend"></a>aplica o "backend" </dt> <dd> <p>Ao aplicar um patch, ignore as alterações no espaço das linhas do contexto. Infelizmente, isto significa que caso as linhas "antigas" sendo substituídas pelo patch difiram apenas pelo espaço do arquivo existente haverá um conflito de integração em vez da aplicação bem sucedida do patch.</p> </dd> <dt class="hdlist1" id="git-rebase-mesclaobackend"> <a class="anchor" href="#git-rebase-mesclaobackend"></a>mescla o "backend" </dt> <dd> <p>Trate as linhas apenas com alterações de espaço em branco como linhas inalteradas durante a mesclagem. Infelizmente, isso significa que todos os fragmentos das correções destinados a alterar os espaços em branco e nada mais será descartado, ainda que o outro lado não tenha feito alterações conflitantes.</p> </dd> </dl> </div> </dd> <dt class="hdlist1" id="git-rebase---whitespaceltopogt"> <a class="anchor" href="#git-rebase---whitespaceltopogt"></a>--whitespace=<opção> </dt> <dd> <p>Esta opção é repassada para o comando <code>git apply</code> (consulte <a href='/docs/git-apply/pt_BR'>git-apply[1]</a>) que aplica a correção. Implica no uso da opção <code>--apply</code>.</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Em vez de usar a hora atual como a data de quem fez o commit, utilize a data do autor que fez o rebase do commit como a data do commit. Esta opção implica no uso de <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>Em vez de usar a data do autor do commit original, use a hora atual como a data do autor do commit refeito via "rebase". Implica no uso da opção <code>--force-rebase</code>.</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---signoff"> <a class="anchor" href="#git-rebase---signoff"></a>--signoff </dt> <dd> <p>Adicione uma resposta <code>Assinado-por</code> em todos os commits que tiveram a sua fundação reconstruída. Observe que caso a opção <code>--interactive</code> seja utilizada, apenas os commit marcados para serem selecionados, editados ou reformulados terão um caracteres de resposta adicionado.</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Faça uma lista dos commits que estão prestes a ser refeitos com o "rebase". Deixe o usuário editar esta lista antes de realizar o "rebase". Esse modo também pode ser usado para dividir os commits (consulte <em>DIVIDINDO OS COMMITS</em> abaixo).</p> <div class="paragraph"> <p>O formato da lista dos commits pode ser alterado ao definir a configuração ´rebase.instructionFormat`. Um formato de instrução personalizado terá automaticamente o hash do commit anexado ao formato.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>É predefinido que um "rebase" simplesmente eliminará a mesclagem dos commits da lista de tarefas e colocará os commits que foram refeitos num único ramo linear. Com <code>--rebase-merges</code>, a reconstrução com o "rebase" tentará preservar a estrutura da ramificação dentro dos commits que devem sofrer a reconstrução, recriando a mesclagem dos commits. Quaisquer conflitos resolvidos na mesclagem ou nas emendas manuais destas mesclagens dos commits terão que ser resolvidos ou aplicados manualmente. A opção <code>--no-rebase-merges</code> pode ser usada para anular a opção de configuração <code>rebase.rebaseMerges</code> e um <code>--rebase-merges</code> anterior.</p> <div class="paragraph"> <p>Ao refazer as mesclagens com o "rebase", existem dois modos: <code>rebase-cousins</code> e <code>no-rebase-cousins</code>. Se o modo não for especificado, a predefinição será <code>no-rebase-cousins</code>. No modo <code>no-rebase-cousins</code>, os commits que não têm <code><upstream></code> como ancestral direto manterão o seu ponto de ramificação original, ou seja, os commits que seriam excluídos pela opção <code>--ancestry-path</code> do <a href='/docs/git-log/pt_BR'>git-log[1]</a> manterão a sua ancestralidade original automaticamente. No modo <code>rebase-cousins</code>, esses commits são rebaseados em <code><upstream></code> (ou <code><onto></code>, se especificado).</p> </div> <div class="paragraph"> <p>Atualmente, só é possível recriar a mesclagem dos commits utilizando a estratégia de mesclagem <code>ort</code>; diferentes estratégias de mesclagem podem ser utilizadas somente através dos comandos explícitos como <code>exec git merge -s <strategy> [...]</code>.</p> </div> <div class="paragraph"> <p>Consulte também <em>RECONSTRUINDO AS MESCLAGENS</em> e <em>OPÇÕES INCOMPATÍVEIS</em> abaixo.</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>Anexe "exec <cmd>" após cada linha, criando um commit no final do histórico. O <code><cmd></code> será interpretado como um ou mais comandos do shell. Qualquer comando que falhar interromperá a reconstrução da fundação, encerrando com o código 1.</p> <div class="paragraph"> <p>É possível executar vários comandos utilizando uma instância da opção <code>--exec</code> com vários comandos:</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase -i --exec "cmd1 && cmd2 && ..."</pre> </div> </div> <div class="paragraph"> <p>ou utilizando mais de um <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>Caso a opção <code>--autosquash</code> seja utilizado, as linhas <code>exec</code> não serão anexadas aos commits intermediários e aparecerão apenas no final de cada série de compressão/correção.</p> </div> <div class="paragraph"> <p>Utiliza o mecanismo <code>--interactive</code> internamente, porém pode ser executado sem a opção <code>--interactive</code> de forma explicita.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</p> </div> </dd> <dt class="hdlist1" id="git-rebase---root"> <a class="anchor" href="#git-rebase---root"></a>--root </dt> <dd> <p>Refaça com "rebase" todos os commits acessíveis a partir do <code><ramo></code>, em vez de limitá-los com um <code><upstream></code>. Isso permite que você faça o rebase num ramo do(s) commit(s) raiz(es).</p> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Automatically squash commits with specially formatted messages into previous commits being rebased. If a commit message starts with "squash! ", "fixup! " or "amend! ", the remainder of the title is taken as a commit specifier, which matches a previous commit if it matches the title or the hash of that commit. If no commit matches fully, matches of the specifier with the start of commit titles are considered.</p> <div class="paragraph"> <p>Na lista de tarefas do rebase, as ações dos commits <em>squash</em>, <em>fixup</em> e <em>amend</em> são alteradas de <code>pick</code> para <code>squash</code>, <code>fixup</code> ou <code>fixup -C</code>, respectivamente, e são movidas logo após o commit que eles modificam. A opção <code>--interactive</code> pode ser usada para revisar e editar a lista de tarefas antes de dar continuidade.</p> </div> <div class="paragraph"> <p>The recommended way to create commits with squash markers is by using the <code>--squash</code>, <code>--fixup</code>, <code>--fixup=amend:</code> or <code>--fixup=reword:</code> options of <a href='/docs/git-commit/pt_BR'>git-commit[1]</a>, which take the target commit as an argument and automatically fill in the title of the new commit from that.</p> </div> <div class="paragraph"> <p>Setting configuration variable <code>rebase.autoSquash</code> to true enables auto-squashing by default for interactive rebase. The <code>--no-autosquash</code> option can be used to override that setting.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</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>Crie automaticamente uma entrada de armazenamento temporário antes do início da operação e aplique-a ao concluir a operação. Isso significa que você pode executar o "rebase" numa árvore de trabalho suja. No entanto, use-o com cuidado: o aplicativo de armazenamento final após um"rebase" bem-sucedido pode resultar em conflitos não triviais.</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>Reagende automaticamente os comandos <code>exec</code> que falharam. Isso só faz sentido no modo interativo (ou quando uma opção <code>--exec</code> for utilizada).</p> <div class="paragraph"> <p>Esta opção se aplica quando um "rebase" for iniciado. Ele é preservado com base para todo o "rebase", em ordem, na opção de linha de comando usada para o <code>git rebase</code> inicial, a configuração <code>rebase.rescheduleFailedExec</code> (consulte <a href='/docs/git-config/pt_BR'>git-config[1]</a> ou "CONFIGURAÇÃO" abaixo), ou a predefinição é <em>false</em>.</p> </div> <div class="paragraph"> <p>O registro desta opção para todo o "rebase" é um recurso conveniente. Caso contrário, um <code>--no-reschedule-failed-exec</code> explícito no início seria substituído pela presença de uma configuração <code>rebase.rescheduleFailedExec=true</code> quando o <code>git rebase --continue</code> fosse invocado. Atualmente, você não pode passar <code>--[no-]reschedule-failed-exec</code> para o comando <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>Atualize automaticamente todas as ramificações que apontem para os commits onde os "rebases" estejam sendo feitos. Quaisquer ramificações forem verificadas numa árvore de trabalho não são atualizadas desta maneira.</p> <div class="paragraph"> <p>Caso a variável de configuração <code>rebase.updateRefs</code> esteja definida, então esta opção pode ser usada para substituir e desativar esta configuração.</p> </div> <div class="paragraph"> <p>Consulte também a seção "OPÇÕES INCOMPATÍVEIS" logo abaixo.</p> </div> </dd> </dl> </div> </div> </div> <div class="sect1"> <h2 id="_opções_incompatíveis"><a class="anchor" href="#_opções_incompatíveis"></a>OPÇÕES INCOMPATÍVEIS</h2> <div class="sectionbody"> <div class="paragraph"> <p>As seguintes opções:</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>são incompatíveis com as seguintes opções:</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 quando utilizado com --keep-base</p> </li> <li> <p>--update-refs</p> </li> <li> <p>--root quando utilizado sem o --onto</p> </li> </ul> </div> <div class="paragraph"> <p>Além disso, os seguintes pares de opções são incompatíveis:</p> </div> <div class="ulist"> <ul> <li> <p>--keep-base e --onto</p> </li> <li> <p>--keep-base e --root</p> </li> <li> <p>--fork-point e --root</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="_diferenças_comportamentais"><a class="anchor" href="#_diferenças_comportamentais"></a>DIFERENÇAS COMPORTAMENTAIS</h2> <div class="sectionbody"> <div class="paragraph"> <p>O <code>git rebase</code> tem dois backends principais: <em>apply</em> e <em>merge</em>. (O backend <em>apply</em> costumava ser conhecido como backend <em>am</em>, mas o nome gerou confusão, pois parece um verbo em vez de um substantivo. Além disso, o backend <em>merge</em> costumava ser conhecido como backend interativo, mas agora também é usado para casos não interativos. Ambos foram renomeados com base na funcionalidade de baixo nível que sustentava cada um deles). Há algumas diferenças sutis na maneira de como estes dois backends se comportam:</p> </div> <div class="sect2"> <h3 id="_os_commits_vazios"><a class="anchor" href="#_os_commits_vazios"></a>Os commits vazios</h3> <div class="paragraph"> <p>Infelizmente, o backend <em>apply</em> descarta os commits vazios intencionalmente, ou seja, os commits que começaram vazios, embora isso seja raro na prática. Ele também descarta os commits que ficam vazios e não há opção para controlar este comportamento.</p> </div> <div class="paragraph"> <p>É predefinido que a estrutura <em>merge</em> mantenha os commits intencionalmente vazios (com <code>-i</code> são marcados como vazio no editor da lista de tarefas ou podem ser descartados automaticamente com a opção <code>--no-keep-empty</code>).</p> </div> <div class="paragraph"> <p>Similar to the apply backend, by default the merge backend drops commits that become empty unless <code>-i</code>/<code>--interactive</code> is specified (in which case it stops and asks the user what to do). The merge backend also has an <code>--empty=(drop|keep|stop)</code> option for changing the behavior of handling commits that become empty.</p> </div> </div> <div class="sect2"> <h3 id="_detecção_da_renomeação_do_diretório"><a class="anchor" href="#_detecção_da_renomeação_do_diretório"></a>Detecção da renomeação do diretório</h3> <div class="paragraph"> <p>Devido à falta de informações precisas sobre a árvore (decorrente da construção de ancestrais falsos com as informações limitadas disponíveis nas correções), a detecção da renomeação do diretório está desativada no backend <em>apply</em>. A detecção desativada da renomeação do diretório significa que, se um lado do histórico renomear um diretório e o outro adicionar novos arquivos ao diretório antigo, os novos arquivos serão deixados para trás no diretório antigo sem nenhum aviso no momento do "rebase".</p> </div> <div class="paragraph"> <p>A detecção da renomeação do diretório funciona com a estrutura <em>merge</em>, neste caso, fornecendo informações para você.</p> </div> </div> <div class="sect2"> <h3 id="_contexto"><a class="anchor" href="#_contexto"></a>Contexto</h3> <div class="paragraph"> <p>The <em>apply</em> backend works by creating a sequence of patches (by calling <code>format-patch</code> internally), and then applying the patches in sequence (calling <code>am</code> internally). Patches are composed of multiple hunks, each with line numbers, a context region, and the actual changes. The line numbers have to be taken with some offset, since the other side will likely have inserted or deleted lines earlier in the file. The context region is meant to help find how to adjust the line numbers in order to apply the changes to the right lines. However, if multiple areas of the code have the same surrounding lines of context, the wrong one can be picked. There are real-world cases where this has caused commits to be reapplied incorrectly with no conflicts reported. Setting <code>diff.context</code> to a larger value may prevent such types of problems, but increases the chance of spurious conflicts (since it will require more lines of matching context to apply).</p> </div> <div class="paragraph"> <p>A estrutura <em>merge</em> trabalha com a cópia completa de casa arquivo relevante isolando-os destes tipos de problemas.</p> </div> </div> <div class="sect2"> <h3 id="_a_rotulagem_dos_marcadores_de_conflitos"><a class="anchor" href="#_a_rotulagem_dos_marcadores_de_conflitos"></a>A rotulagem dos marcadores de conflitos</h3> <div class="paragraph"> <p>Quando há conflitos no conteúdo, o mecanismo de mesclagem tenta anotar os marcadores de conflito de cada lado com os commits de onde o conteúdo veio. Como o backend <em>apply</em> descarta as informações originais sobre os commits refeitos com rebase e as suas origens (e, em vez disso, gera novos commits falsos com base em informações limitadas nas correções geradas), estes commits não podem ser identificados; em vez disso, é necessário recorrer a um resumo do commit. Além disso, quando <code>merge.conflictStyle</code> for definido como <code>diff3</code> ou <code>zdiff3</code>, o backend <em>apply</em> usará "constructed merge base" para rotular o conteúdo da base de mesclagem e, portanto, não fornecerá nenhuma informação sobre o commit da mesclagem da base.</p> </div> <div class="paragraph"> <p>A estrutura <em>merge</em> funciona com commits completos nos dois lados do histórico e portanto não possuem tais limitações.</p> </div> </div> <div class="sect2"> <h3 id="_ganchos"><a class="anchor" href="#_ganchos"></a>Ganchos</h3> <div class="paragraph"> <p>Tradicionalmente, o backend <em>apply</em> não invoca o gancho pós commit, enquanto o backend <em>merge</em> invoca. Ambos invocam o gancho "pós-checkout", embora o backend <em>merge</em> tenha suprimido a sua criação. Além disso, ambos os "backends" só invocam o gancho "pós-checkout" com o commit do ponto inicial do rebase, não invoca nos commits intermediários nem no commit final. Em cada caso, a invocação destes hooks ocorreu por acidente de implementação e não por projeto (ambos os backends foram originalmente implementados como scripts de shell e invocaram outros comandos como <code>git checkout</code> ou <code>git commit</code> que invocariam os ganchos). Ambos os backends devem ter o mesmo comportamento, embora não esteja totalmente claro qual deles está correto, quando estiverem. Provavelmente faremos com que o rebase pare de invocar estes ganchos no futuro.</p> </div> </div> <div class="sect2"> <h3 id="_interruptabilidade"><a class="anchor" href="#_interruptabilidade"></a>Interruptabilidade</h3> <div class="paragraph"> <p>O backend <em>apply</em> tem problemas de segurança com uma interrupção inoportuna; se o usuário pressionar Ctrl-C no momento errado para tentar abortar o rebase, o rebase pode entrar num estado onde não pode ser abortado após um <code>git rebase --abort</code>. O backend <em>merge</em> não parece sofrer da mesma deficiência. (Consulte <a href="https://lore.kernel.org/git/20200207132152.GC2868@szeder.dev/" class="bare">https://lore.kernel.org/git/20200207132152.GC2868@szeder.dev/</a> para obter mais detalhes.)</p> </div> </div> <div class="sect2"> <h3 id="_reescrevendo_os_commits"><a class="anchor" href="#_reescrevendo_os_commits"></a>Reescrevendo os Commits</h3> <div class="paragraph"> <p>Quando ocorre um conflito durante o rebase, ele é interrompido e o usuário é solicitado a resolver o problema. Como o usuário talvez precise fazer alterações importantes durante a resolução de conflitos, após a resoluão dos conflitos e o usuário tiver executado o comando <code>git rebase --continue</code>, o rebase deverá abrir um editor e solicitar que o usuário atualize a mensagem do commit. O backend <em>merge</em> faz isso, enquanto o backend <em>apply</em> aplica cegamente a mensagem original do commit.</p> </div> </div> <div class="sect2"> <h3 id="_diferenças_diversas"><a class="anchor" href="#_diferenças_diversas"></a>Diferenças diversas</h3> <div class="paragraph"> <p>Existem mais algumas diferenças comportamentais que a maioria das pessoas considerariam fazer de forma inconsequente, porém são mencionadas por questões de integridade:</p> </div> <div class="ulist"> <ul> <li> <p>Reflog: As duas estruturas que utilizarão palavras diferentes durante a descrição das alterações feitas no reflog, embora ambos façam a utilização da palavra "rebase".</p> </li> <li> <p>Mensagens de progresso, informativas e de erro: Os dois backends fornecem mensagens ligeiramente diferentes de progresso e informacionais. Além disso, o backend <em>apply</em> grava mensagens de erro (como "Seus arquivos seriam sobrescritos…​") no stdout, enquanto o backend <em>merge</em> as grava no stderr.</p> </li> <li> <p>Diretórios de estado: As duas estruturas mantêm a sua condição em diferentes diretórios dentro do <code>.git/</code></p> </li> </ul> </div> </div> </div> </div> <div class="sect1"> <h2 id="_estratégias_de_mesclagem"><a class="anchor" href="#_estratégias_de_mesclagem"></a>ESTRATÉGIAS DE MESCLAGEM</h2> <div class="sectionbody"> <div class="paragraph"> <p>O mecanismo de mesclagem (os comandos <code>git merge</code> e <code>git pull</code>) permite que as <em>estratégias de mesclagem</em> do backend sejam escolhidas com a opção <code>-s</code>. Algumas estratégias também podem ter as suas próprias opções, que podem ser passadas usando argumentos <code>-X<opção></code> ao comando <code>git merge</code> e/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>Esta é a estratégia de mesclagem predefinida ao extrair ou ao mesclar um ramo. Esta estratégia só pode resolver dois <code>HEADS</code> usando um algoritmo de mesclagem de 3 vias. Quando há mais de um ancestral comum que pode ser usado para a mesclagem de 3 vias, ele cria uma árvore mesclada dos ancestrais comuns e a utiliza como uma árvore de referência para a mesclagem de 3 vias. Foi relatado que isso resulta em menos conflitos de mesclagem sem causar erros de mesclagem através dos testes feitos na mesclagem dos commits reais retirados do histórico de desenvolvimento do kernel do Linux 2.6. Além disso, esta estratégia pode detectar e lidar com as mesclagens que envolvam renomeações. Não faz uso de cópias detectadas. O nome desse algoritmo é um acrônimo ("Ostensibly Recursive’s Twin") e surgiu do fato de que ele foi escrito como um substituto para o padrão di algoritmo anterior, <code>recursive</code>.</p> <div class="paragraph"> <p>A estratégia <em>ort</em> pode adotar as seguintes opções:</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>Esta opção impõem a resolução automática dos conflitos de maneira limpa, favorecendo a <em>nossa</em> versão. As alterações da outra árvore que não entram em conflito com o nosso lado são refletidas no resultado da mesclagem. Para um arquivo binário, todo o conteúdo é retirado a partir do nosso lado.</p> <div class="paragraph"> <p>Isso não deve ser confundido com a estratégia da <em>nossa</em> mesclagem, que nem sequer analisa o que a outra árvore contém. Ela descarta tudo o que a outra árvore fez, declarando que a <em>nossa</em> história contém tudo o que aconteceu nela.</p> </div> </dd> <dt class="hdlist1" id="git-rebase-theirs"> <a class="anchor" href="#git-rebase-theirs"></a>theirs </dt> <dd> <p>Este é o oposto do <em>nosso</em>; observe que, diferentemente do <em>nosso</em>, não existe uma estratégia de mesclagem <em>deles</em> para confundir esta opção de mesclagem.</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>Trata as linhas com o tipo indicado de alteração do espaço em branco como inalteradas para os fins de uma mesclagem de três vias. As alterações do espaço em branco misturadas com as outras alterações numa linha não são ignoradas. Consulte também o comando <a href='/docs/git-diff/pt_BR'>git-diff[1]</a> <code>-b</code>, <code>-w</code>, <code>--ignore-space-at-eol</code>, e a opção <code>--ignore-cr-at-eol</code>.</p> <div class="ulist"> <ul> <li> <p>Caso a versão <em>their</em> (dele) introduzir apenas as alterações de espaço em uma linha, a <em>our</em> (nossa) versão será utilizada;</p> </li> <li> <p>Caso a <em>our</em> (nossa) versão introduzir alterações nos espaços, porém a versão <em>their</em> (dele) incluir uma alteração substancial, a versão <em>their</em> (dele) será utilizada;</p> </li> <li> <p>Caso contrário, a mesclagem continuará de forma usual.</p> </li> </ul> </div> </dd> <dt class="hdlist1" id="git-rebase-renormalize"> <a class="anchor" href="#git-rebase-renormalize"></a>renormalize </dt> <dd> <p>This runs a virtual check-out and check-in of all three stages of any file which needs a three-way merge. This option is meant to be used when merging branches with different clean filters or end-of-line normalization rules. See "Merging branches with differing checkin/checkout attributes" in <a href='/docs/gitattributes/pt_BR'>gitattributes[5]</a> for details.</p> </dd> <dt class="hdlist1" id="git-rebase-no-renormalize"> <a class="anchor" href="#git-rebase-no-renormalize"></a>no-renormalize </dt> <dd> <p>Desativa a opção <code>renormalize</code>. Isso substitui a variável de configuração <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>Ative a detecção de renomeação, definindo opcionalmente o limite de similaridade. Esta é a predefinição. Isso substitui a variável de configuração <em>merge.renames</em>. Consulte também <a href='/docs/git-diff/pt_BR'>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>É um sinônimo obsoleto para <code>find-renames=<n></code>.</p> </dd> <dt class="hdlist1" id="git-rebase-subtreeltcaminhogt"> <a class="anchor" href="#git-rebase-subtreeltcaminhogt"></a>subtree[=<caminho>] </dt> <dd> <p>Esta opção é uma forma mais avançada de estratégia de <em>subárvore</em>, onde a estratégia faz uma estimativa de como as duas árvores devem ser deslocadas para coincidir uma com a outra durante a mesclagem. Em vez disso, o caminho especificado é prefixado (ou retirado do início) para fazer com que a forma das duas árvores coincida.</p> </dd> </dl> </div> </dd> <dt class="hdlist1" id="git-rebase-recursive"> <a class="anchor" href="#git-rebase-recursive"></a>recursive </dt> <dd> <p>Isso só pode resolver dois cabeçalhos usando um algoritmo de mesclagem de 3 vias. Quando há mais de um ancestral comum que pode ser usado para a mesclagem de 3 vias, ele cria uma árvore mesclada dos ancestrais comuns e a utiliza como uma árvore de referência para a mesclagem de 3 vias. Foi relatado que isso resulta em menos conflitos de mesclagem sem causar erros de mesclagem através dos testes feitos na mesclagem dos commits reais retirados do histórico de desenvolvimento do kernel do Linux 2.6. Além disso, ele pode detectar e lidar com mesclagens que envolvam renomeações. Não faz uso de cópias detectadas. Essa era a estratégia padrão para resolver dois cabeçalhos do Git v0.99.9k até a v2.33.0.</p> <div class="paragraph"> <p>A estratégia <em>recursiva</em> usa as mesmas opções que a <em>ort</em>. Entretanto, há três opções adicionais que o <em>ort</em> ignora (não documentadas acima) e que podem ser úteis com a estratégia <em>recursiva</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>É um sinônimo obsoleto para <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>Use um algoritmo de comparação diferente durante a mesclagem, o que pode ajudar a evitar mesclagens incorretas que ocorrem devido a linhas correspondentes sem importância (como chaves de funções distintas). Consulte também <a href='/docs/git-diff/pt_BR'>git-diff[1]</a> <code>--diff-algorithm</code>. Observe que <code>ort</code> usa especificamente <code>diff-algorithm=histogram</code>, enquanto <code>recursive</code> usa como predefinição a configuração <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>Desativa a detecção de renomeação. Isto sobrepõem a variável de configuração <code>merge.renames</code> configuration. Consulte também <a href='/docs/git-diff/pt_BR'>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>Isso só pode resolver duas cabeças (ou seja, o ramo atual e outro ramo do qual você retirou) usando um algoritmo de mesclagem de três vias. Ele tenta detectar cuidadosamente as ambiguidades de mesclagem cruzada. Ele não lida com renomeações.</p> </dd> <dt class="hdlist1" id="git-rebase-octopus"> <a class="anchor" href="#git-rebase-octopus"></a>octopus </dt> <dd> <p>Isso resolve casos com mais de dois cabeçalhos, mas se recusa a fazer uma mesclagem complexa que precise de uma resolução manual. Seu principal objetivo é ser usado para agrupar os tópicos dos cabeçalhos juntos. Esta é a estratégia de mesclagem predefinida ao obter (fazer um pull) ou ao mesclar um ramo.</p> </dd> <dt class="hdlist1" id="git-rebase-ours-1"> <a class="anchor" href="#git-rebase-ours-1"></a>ours </dt> <dd> <p>Isso resolve qualquer quantidade de cabeçalhos, mas a árvore resultante da mesclagem é sempre a do cabeçalho do ramo atual, ignorando efetivamente todas as alterações de todos os outros ramos. Ele deve ser usado para substituir o histórico de desenvolvimento antigo das ramificações paralelas. Observe que isso é diferente da opção <code>-Xours</code> para a estratégia de mesclagem da opção <em>recursive</em>.</p> </dd> <dt class="hdlist1" id="git-rebase-subtree"> <a class="anchor" href="#git-rebase-subtree"></a>subtree </dt> <dd> <p>Esta é uma estratégia <code>ort</code> modificada. Ao mesclar as árvores <em>A</em> e <em>B</em>, caso <em>B</em> corresponda a uma subárvore de <em>A</em>, o <em>B</em> será ajustado primeiro para coincidir à estrutura da árvore <em>A</em>, em vez de ler as árvores no mesmo nível. Esse ajuste também é feito na árvore ancestral comum.</p> </dd> </dl> </div> <div class="paragraph"> <p>Com as estratégias que usam a mesclagem de 3 vias (incluindo a predefinição, <em>ort</em>), se uma alteração for feita em ambos os ramos, mas posteriormente revertida num dos ramos, essa alteração estará presente no resultado da mesclagem; algumas pessoas acham este comportamento confuso. Isto ocorre porque somente os cabeçalhos e a base de mesclagem são considerados ao realizar uma mesclagem, e não os commits individuais. Portanto, o algoritmo de mesclagem considera a alteração revertida como se não houvesse nenhuma alteração e, em vez disso, substitui a versão alterada.</p> </div> </div> </div> <div class="sect1"> <h2 id="_observações"><a class="anchor" href="#_observações"></a>OBSERVAÇÕES</h2> <div class="sectionbody"> <div class="paragraph"> <p>Você deve entender as implicações de usar o comando <code>git rebase</code> num repositório que você compartilha. Consulte também SE RECUPERANDO DA RECONSTRUÇÃO DA FUNDAÇÃO INICIAL (UPSTREM REBASE) abaixo.</p> </div> <div class="paragraph"> <p>Quando o rebase for executado, ele primeiro executará um gancho <code>pre-rebase</code>, caso exista um. Você pode usar esse gancho para fazer verificações de sanidade e rejeitar o rebase caso não seja apropriado. Consulte o script modelo do gancho do <code>pre-rebase</code> para ver um exemplo.</p> </div> <div class="paragraph"> <p>Após a conclusão, o <code><ramo></code> será o ramo atual.</p> </div> </div> </div> <div class="sect1"> <h2 id="_modo_interativo"><a class="anchor" href="#_modo_interativo"></a>MODO INTERATIVO</h2> <div class="sectionbody"> <div class="paragraph"> <p>O rebase interativo significa que você tem a chance de editar os commits onde o rebase foi feito. Você pode reordenar os commits e removê-los (eliminando correções ruins ou indesejados).</p> </div> <div class="paragraph"> <p>O modo interativo é destinado para este tipo de fluxo de trabalho:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>tenho uma ideia maravilhosa</p> </li> <li> <p>hackear o código</p> </li> <li> <p>preparar uma série para envio</p> </li> <li> <p>enviar</p> </li> </ol> </div> <div class="paragraph"> <p>onde o ponto 2. consiste em várias instâncias do</p> </div> <div class="paragraph"> <p>a) uso regular</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>termine algo digno de um commit</p> </li> <li> <p>commit</p> </li> </ol> </div> <div class="paragraph"> <p>b) correção independente</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>perceber que algo não funciona</p> </li> <li> <p>conserte isso</p> </li> <li> <p>faça o commit</p> </li> </ol> </div> <div class="paragraph"> <p>Às vezes, o problema é corrigido na versão b.2. Não pode ser emendado no commit parcialmente perfeito que ele corrige, porque este commit está profundamente entranhado numa série de correções. É exatamente para isso que serve o rebase interativo: use-o após muitos "a" e "b", ao reorganizar e editar os commits e acumulando vários commits num só.</p> </div> <div class="paragraph"> <p>Inicie-o com o último commit que você quer manter como está:</p> </div> <div class="literalblock"> <div class="content"> <pre>git rebase -i <após-este-commit></pre> </div> </div> <div class="paragraph"> <p>Um editor será acionado com todos os commits em seu ramo atual (ignorando a mesclagem dos commits), que vêm após o commit informado. Você pode reordenar os commits nesta lista como quiser e também é possível removê-los. A lista é mais ou menos assim:</p> </div> <div class="listingblock"> <div class="content"> <pre>pick deadbee Uma linha deste commit pick fa1afe1 Uma linha do próximo commit ...</pre> </div> </div> <div class="paragraph"> <p>As descrições on-line são puramente para o seu prazer; o comando <em>git rebase</em> não examinará eles, porém os nomes dos commits ("deadbee" e "fa1afe1" neste exemplo), portanto, não exclua ou edite os nomes.</p> </div> <div class="paragraph"> <p>Ao substituir o comando "pick" pelo comando "edit", é possível dizer ao comando <code>git rebase</code> para parar após aplicar este commit, para que seja possível editar os arquivos e/ou a mensagem do commit, alterar o commit e continuar com a reconstrução.</p> </div> <div class="paragraph"> <p>Para interromper um "rebase" (exatamente como um comando "edit" faria, mas sem fazer uma escolha seletiva de nenhum commit primeiro), use o comando "break".</p> </div> <div class="paragraph"> <p>Caso apenas queira editar a mensagem do commit para um commit, substitua o comando <code>pick</code> pelo comando <code>reword</code>.</p> </div> <div class="paragraph"> <p>Para eliminar um commit, substitua o comando "pick" por "drop" ou apenas exclua a linha coincidente.</p> </div> <div class="paragraph"> <p>Se você quiser juntar dois ou mais commits num só, substitua o comando <em>pick</em> para o segundo commit e os subsequentes com <em>squash</em> ou <em>fixup</em>. Se os commits tiverem autores diferentes, o commit agrupado será atribuído ao autor do primeiro commit. A mensagem sugerida do commit para o commit agrupado é a concatenação da mensagem do primeiro commit com aquelas identificadas pelos comandos <em>squash</em>, omitindo as mensagens dos commits identificados pelos comandos <em>fixup</em>, a menos que <em>fixup -c</em> seja usado. Nesse caso, a mensagem sugerida do commit é apenas a mensagem do commit <em>fixup -c</em>, e um editor é aberto para que você possa editar a mensagem. O conteúdo (correção) do commit <em>fixup -c</em> ainda é incorporado ao commit agrupado. Se houver mais de um commit <em>fixup -c</em>, será usada a mensagem do último commit. Você também pode usar <em>fixup -C</em> para obter o mesmo comportamento de <em>fixup -c</em>, mas sem abrir um editor.</p> </div> <div class="paragraph"> <p>O comando <code>git rebase</code> será interrompido quando o "pick" for substituído por "edit" ou quando um comando falhar devido aos erros da mesclagem. Quando você terminar de editar e/ou resolver os conflitos, será possível continuar utilizando <code>git rebase --continue</code>.</p> </div> <div class="paragraph"> <p>Como por exemplo, caso você queira reordenar os últimos 5 commits de maneira onde o que era <code>HEAD~4</code> se torne o novo <code>HEAD</code>. Para conseguir isso, você chamaria o comando <code>git rebase</code> assim:</p> </div> <div class="listingblock"> <div class="content"> <pre>$ git rebase -i HEAD~5</pre> </div> </div> <div class="paragraph"> <p>E mova o primeiro patch para o ramo da lista.</p> </div> <div class="paragraph"> <p>Convém recriar a mesclagem dos commits, por exemplo, caso tenha um histórico como este:</p> </div> <div class="listingblock"> <div class="content"> <pre> X \ A---M---B / ---o---O---P---Q</pre> </div> </div> <div class="paragraph"> <p>Suponha que queira reconstruir o lado do ramo ao lado começando em "A" para "Q". Verifique se o <code>HEAD</code> atual é "B" e chame</p> </div> <div class="listingblock"> <div class="content"> <pre>$ git rebase -i -r --onto Q O</pre> </div> </div> <div class="paragraph"> <p>A reordenação e a edição dos commits geralmente criam etapas intermediárias não testadas. Talvez você queira verificar se a edição do histórico não quebrou nada executando um teste ou, pelo menos, recompilando em pontos intermediários do histórico usando o comando <em>exec</em> (o atalho é <em>x</em>). Você pode fazer isso criando uma lista de tarefas como esta:</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>A reconstrução interativa será interrompida quando um comando falhar (ou seja, encerra com uma condição diferente de 0) oferecendo uma oportunidade para a correção do problema. Você pode continuar com o comando <code>git rebase --continue</code>.</p> </div> <div class="paragraph"> <p>O comando <em>exec</em> inicia o comando num shell (a ´predefinição, geralmente é /bin/sh), para que você possa usar os recursos do shell (como <em>cd</em>, <em>></em>, <em>;</em> …​). O comando é executado a partir da raiz da árvore de trabalho.</p> </div> <div class="listingblock"> <div class="content"> <pre>$ git rebase -i --exec "make test"</pre> </div> </div> <div class="paragraph"> <p>Esse comando permite que você verifique se os commits intermediários são compiláveis. A lista de tarefas fica assim:</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="_dividindo_os_commits"><a class="anchor" href="#_dividindo_os_commits"></a>DIVIDINDO OS COMMITS</h2> <div class="sectionbody"> <div class="paragraph"> <p>No modo interativo, você pode marcar commits com a ação <em>edit</em> (editar). No entanto, isso não significa necessariamente que o comando <code>git rebase</code> espera que o resultado desta edição seja exatamente um commit. De fato, você pode desfazer o commit ou adicionar outros commits. Isso pode ser usado para dividir um commit em dois:</p> </div> <div class="ulist"> <ul> <li> <p>Inicie um rebase interativo com <code>git rebase -i <commit>^</code>, onde <code><commit></code> é o commit que você deseja dividir. Na verdade, qualquer intervalo do commit serve, desde que contenha este commit.</p> </li> <li> <p>Marque o commit que deseja dividir com a ação "edit".</p> </li> <li> <p>Quando for necessário editar esse commit, execute o comando <code>git reset HEAD^</code>. O efeito é que o <code>HEAD</code> é rebobinado num, e o índice segue o mesmo caminho. No entanto, a árvore de trabalho permanece a mesma.</p> </li> <li> <p>Agora, adicione as alterações ao índice onde você deseja ter no primeiro commit. Você pode usar o comando <code>git add</code> (possivelmente de forma interativa) ou o comando <code>git gui</code> (ou ambos) para fazer isso.</p> </li> <li> <p>Faça o commit do índice agora atual com qualquer mensagem do commit que seja apropriada.</p> </li> <li> <p>Repita as duas últimas etapas até que a sua árvore de trabalho esteja limpa.</p> </li> <li> <p>Continue a reconstrução com <code>git rebase --continue</code>.</p> </li> </ul> </div> <div class="paragraph"> <p>Caso não tenha certeza absoluta que as revisões intermediárias são consistentes (elas compilam, passam no conjunto de testes, etc.), você deve usar o <code>git stash</code> para armazenar o commit das alterações que ainda não foram feitas após cada commit, teste e corrija o commit caso correções sejam necessárias.</p> </div> </div> </div> <div class="sect1"> <h2 id="_se_recuperando_da_reconstrução_da_fundação_inicial_upstrem_rebase"><a class="anchor" href="#_se_recuperando_da_reconstrução_da_fundação_inicial_upstrem_rebase"></a>SE RECUPERANDO DA RECONSTRUÇÃO DA FUNDAÇÃO INICIAL (UPSTREM REBASE)</h2> <div class="sectionbody"> <div class="paragraph"> <p>Fazer o rebase (ou qualquer outra forma de reescrita) de uma ramificação onde outras pessoas trabalharam é uma má ideia: qualquer pessoa que esteja a posteriori dela é forçada a corrigir seu histórico manualmente. Esta seção explica como fazer a correção do ponto de vista de quem fez depois. A verdadeira correção, no entanto, seria evitar o rebase da ponta em primeiro lugar.</p> </div> <div class="paragraph"> <p>Para ilustrar, imagine que você esteja numa situação onde alguém desenvolve um <em>subsystem</em> no ramo e você está trabalhando num <em>topic</em> que depende deste <em>subsystem</em>. Você pode acabar com um histórico como este:</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o---o---o---o master \ o---o---o---o---o subsystem \ *---*---* topic</pre> </div> </div> <div class="paragraph"> <p>Caso a reconstrução da fundação do <em>subsystem</em> seja realizada contra o <em>master</em>, o seguinte acontece:</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' subsystem \ *---*---* topic</pre> </div> </div> <div class="paragraph"> <p>Caso agora continue o desenvolvimento normalmente e eventualmente mescle o <em>topic</em> para <em>subsystem</em>, os commits do <em>subsystem</em> permanecerão duplicados para sempre:</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 subsystem \ / *---*---*-..........-*--* topic</pre> </div> </div> <div class="paragraph"> <p>Estas duplicatas são geralmente desaprovadas, pois desorganizam o histórico, tornando-o mais difícil de acompanhar. Para limpar as coisas, você precisa transplantar os commits em <em>topic</em> para o novo topo <em>subsystem</em>, ou seja, rebase <em>topic</em>. Isso se torna um efeito cascata: qualquer pessoa que esteja após <em>topic</em> é forçada a refazer a base também, e assim por diante!</p> </div> <div class="paragraph"> <p>Existem dois tipos de correções, discutidos nas seguintes subseções:</p> </div> <div class="dlist"> <dl> <dt class="hdlist1" id="git-rebase-Casofcilasalteraessoliteralmenteasmesmas"> <a class="anchor" href="#git-rebase-Casofcilasalteraessoliteralmenteasmesmas"></a>Caso fácil: as alterações são literalmente as mesmas. </dt> <dd> <p>Isso acontece caso a reconstrução do <em>subsystem</em> foi uma reconstrução simples e não houve conflitos.</p> </dd> <dt class="hdlist1" id="git-rebase-Casodifcilasalteraesnosoasmesmas"> <a class="anchor" href="#git-rebase-Casodifcilasalteraesnosoasmesmas"></a>Caso difícil: as alterações não são as mesmas. </dt> <dd> <p>Isso acontece caso a reconstrução da fundação (rebase) do <em>subsistema</em> tiver conflitos ou utilizar o <code>--interactive</code> para omitir, editar, esmagar ou consertar consertos; ou se a inicial utilizou um dos comandos <code>commit --amend</code>, <code>reset</code> ou um histórico completo da reescrita como <a href="https://github.com/newren/git-filter-repo"><code>filter-repo</code></a>.</p> </dd> </dl> </div> <div class="sect2"> <h3 id="_o_caso_fácil"><a class="anchor" href="#_o_caso_fácil"></a>O caso fácil</h3> <div class="paragraph"> <p>Funciona apenas se as alterações (IDs do patch com base no conteúdo do diff) no <em>subsystem</em> que forem literalmente as mesmas antes e depois da reconstrução do <em>subsystem</em>.</p> </div> <div class="paragraph"> <p>Nesse caso, a correção é fácil porque o comando <em>git rebase</em> sabe ignorar as alterações que já estão presentes no novo <em>upstream</em> (a menos que <code>--reapply-cherry-picks</code> seja utilizada). Então, se você diz (supondo que você esteja no <em>topic</em>)</p> </div> <div class="listingblock"> <div class="content"> <pre> $ git rebase subsystem</pre> </div> </div> <div class="paragraph"> <p>você vai acabar com o histórico fixo</p> </div> <div class="listingblock"> <div class="content"> <pre> o---o---o---o---o---o---o---o master \ o'--o'--o'--o'--o' subsystem \ *---*---* topic</pre> </div> </div> </div> <div class="sect2"> <h3 id="_o_caso_difícil"><a class="anchor" href="#_o_caso_difícil"></a>O caso difícil</h3> <div class="paragraph"> <p>As coisas ficam mais complicadas caso as alterações do "subsistema" não coincidam de forma exata aquelas antes da reconstrução.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> Embora uma "recuperação fácil dos casos" às vezes pareça ser bem-sucedida mesmo no caso difícil, pode haver consequências não intencionais. Para Por exemplo, um commit que foi removido através do comando <code>git rebase --interactive</code> será <strong>ressuscitado</strong>! </td> </tr> </table> </div> <div class="paragraph"> <p>A ideia é informar manualmente ao comando <code>git rebase</code> "onde o antigo <em>subsystem</em> terminou e o seu <em>topic</em> começou", ou seja, qual era a antiga mesclagem de base entre eles. Você terá que encontrar uma maneira de nomear o último commit do antigo <em>subsystem</em>, por exemplo:</p> </div> <div class="ulist"> <ul> <li> <p>Com o reflog do <em>subsystem</em>: após o comando <code>git fetch</code>, a ponta antiga do <em>subsystem</em> está em <code>subsystem@{1}</code>. As buscas seguintes aumentarão o número. (Consulte <a href='/docs/git-reflog/pt_BR'>git-reflog[1]</a>.)</p> </li> <li> <p>Em relação ao cume do <em>topic</em>: sabendo que o seu <em>topic</em> tem três commits, o cume antigo do <em>subsystem</em> deve ser <code>topic~3</code>.</p> </li> </ul> </div> <div class="paragraph"> <p>Você pode então transplantar o antigo <code>subsystem..topic</code> para o novo cume dizendo (para o caso do reflog e supondo que você já esteja no <em>topic</em>):</p> </div> <div class="listingblock"> <div class="content"> <pre> $ git rebase --onto subsystem subsystem@{1}</pre> </div> </div> <div class="paragraph"> <p>O efeito cascata de uma recuperação "difícil" (hard case) é especialmente ruim: <em>todos</em> baixaram do <em>topic</em> e agora terão que executar também uma reconstrução "difícil"!</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="_reconstruindo_as_mesclagens"><a class="anchor" href="#_reconstruindo_as_mesclagens"></a>RECONSTRUINDO AS MESCLAGENS</h2> <div class="sectionbody"> <div class="paragraph"> <p>O comando de reconstrução interativa foi originalmente projetado para lidar com séries de patches individuais. Como tal, faz sentido excluir a mesclagem dos commits da lista de tarefas, pois o desenvolvedor pode ter mesclado o <code>master</code> atual enquanto trabalhava no ramo, apenas para redefinir todos os commits para <code>master</code> eventualmente (ignorando a mesclagem dos commits).</p> </div> <div class="paragraph"> <p>No entanto, existem razões legítimas pelas quais um desenvolvedor pode querer recriar as mesclagens dos commits: para manter a estrutura do ramo (ou a "topologia do commit") ao trabalhar em diversos ramos inter-relacionadas.</p> </div> <div class="paragraph"> <p>No exemplo a seguir, o desenvolvedor trabalha em um tópico no ramo que refatora a maneira como os botões são definidos, em outro tópico do ramo que utilize esta refatoração para implementar um botão "Relatar um bug". A saída do <code>git log --graph --format=%s -5</code> pode ficar assim:</p> </div> <div class="listingblock"> <div class="content"> <pre>* Mescla o ramo 'report-a-bug' |\ | * Adiciona o botão de feedback * | Mescla o ramo 'refactor-button' |\ \ | |/ | * Utiliza a classe do Botão para todos os botões | * Extrai o botão genérico do DownloadButton</pre> </div> </div> <div class="paragraph"> <p>O desenvolvedor pode querer redefinir estes commits para um novo <code>master</code> enquanto mantém a topologia da ramificação. Quando se espera que o primeiro tópico do ramo que seja integrado ao` master` muito antes do segundo por exemplo. Para resolver os conflitos da mesclagem com as alterações para a classe <code>DownloadButton</code> que a transformou em <code>master</code> por exemplo.</p> </div> <div class="paragraph"> <p>Esse rebase pode ser realizado com a opção <code>--rebase-merges</code>. Ele gerará uma lista de tarefas semelhante a esta:</p> </div> <div class="listingblock"> <div class="content"> <pre>rotular para # Branch: refactor-button reset onto pick 123456 Extrai o botão genérico do DownloadButton pick 654321 Utiliza a classe do Botão para todos os botões label refactor-button # Branch: report-a-bug reset refactor-button # Utiliza a classe do Botão para todos os botões pick abcdef Adiciona o botão de feedback label report-a-bug reset onto merge -C a1b2c3 refactor-button # Mescla o 'refactor-button' merge -C 6f5e4d report-a-bug # Mescla o 'report-a-bug'</pre> </div> </div> <div class="paragraph"> <p>Ao contrário de uma reconstrução interativa regular, existem os comandos <code>label</code>, <code>reset</code> e <code>merge</code> além dos comandos <code>pick</code>.</p> </div> <div class="paragraph"> <p>O comando <code>label</code> associa um rótulo ao <code>HEAD</code> atual quando este comando for executado. Estes rótulos são criados como refs locais da árvore de trabalho (<code>refs/rewritten/<label></code>) que serão excluídos quando a reconstrução terminar. Dessa forma, as operações da reconstrução em várias árvores de trabalho vinculadas ao mesmo repositório não interferem entre si. Caso o comando <code>label</code> falhe, este é imediatamente reagendado, com uma mensagem útil sobre como proceder.</p> </div> <div class="paragraph"> <p>O comando <code>reset</code> redefine o <code>HEAD</code>, o índice e a árvore de trabalho para a revisão específica. É semelhante a um comando <code>exec git reset --hard <label></code>, porém se recusa a sobrescrever os arquivos que não sejam monitorados. Se o comando <code>reset</code> falhar, ele será imediatamente reagendado, com uma mensagem útil sobre como editar a lista de tarefas (normalmente acontece quando um comando <code>reset</code> foi inserido manualmente na lista de tarefas e contém um erro de digitação).</p> </div> <div class="paragraph"> <p>O comando <code>merge</code> mesclará revisões usadas no que seja <code>HEAD</code> naquele momento. Com <code>-C <original-commit></code>, a mensagem do commit de um determinada mesclagem será usada. Quando o <code>-C</code> é alterado para minúsculo <code>-c</code>, a mensagem será aberta num editor após uma mesclagem bem-sucedida, para que o usuário possa editá-la.</p> </div> <div class="paragraph"> <p>Se um comando <code>merge</code> falhar por qualquer motivo que não seja conflitos de mesclagem (ou seja, quando a operação de mesclagem nem sequer foi iniciada), ele será reagendado imediatamente.</p> </div> <div class="paragraph"> <p>É predefinido que o comando <code>merge</code> use a estratégia de mesclagem <code>ort</code> para mesclagens regulares e <code>octopus</code> para mesclagens "octopus". É possível especificar uma estratégia predefinida para todas as mesclagens usando o a opção <code>--strategy</code> ao invocar o rebase, ou substituir mesclagens específicas na lista interativa de comandos usando um comando <code>exec</code> para invocar o comando <code>git merge</code> explicitamente com a opção <code>--strategy</code>. Observe que, ao invocar explicitamente o comando <code>git merge</code> dessa maneira, você pode usar o fato de que as etiquetas são referências locais da árvore de trabalho (a referência <code>refs/rewritten/onto</code> corresponderia a etiqueta <code>onto</code>, por exemplo) para se referir às ramificações que deseja mesclar.</p> </div> <div class="paragraph"> <p>Observação: o primeiro comando (<code>label onto</code>) rotula a revisão onde os commits são refeitos; O nome <code>onto</code> é apenas uma convenção, como um aceno para a opção <code>--onto</code>.</p> </div> <div class="paragraph"> <p>Também é possível introduzir commits para mesclagem completamente novos, adicionando um comando no formato <code>merge <merge-head></code>. Este formulário gera uma mensagem de commit provisória e sempre abre um editor para permitir que o usuário a edite. Pode ser útil quando por exemplo, um ramo de um tópico acaba resolvendo mais de um problema e quer ser dividido em dois ou mais ramos de tópico. Considere esta lista de tarefas:</p> </div> <div class="listingblock"> <div class="content"> <pre>pick 192837 Alterna do GNU Makefiles para o CMake pick 5a6c7e Documente a alteração para o CMake pick 918273 Corrija a detecção do OpenSSL no CMake pick afbecd http: adicione a compatibilidade com o TLS v1.3 pick fdbaec Corrija a detecção da cURL no CMake no Windows</pre> </div> </div> <div class="paragraph"> <p>O único commit nesta lista que não está relacionado ao CMake pode muito bem ter sido motivado ao trabalhar na correção de todos os erros introduzidos durante a mudança para o CMake, porém ele lida com um interesse diferente. Para dividir esse ramo em dois tópicos, a lista de tarefas pode ser editada desta maneira:</p> </div> <div class="listingblock"> <div class="content"> <pre>rotular para escolha afbecd http: adicione a compatibilidade para o TLS v1.3 label tlsv1.3 redefinir para pick 192837 Alterna do GNU Makefiles para o CMake pick 918273 Corrija a detecção do OpenSSL no CMake pick fdbaec Corrija a detecção da cURL no CMake no Windows pick 5a6c7e Documente a alteração para o CMake label cmake reset onto merge tlsv1.3 merge cmake</pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="_configuração"><a class="anchor" href="#_configuração"></a>CONFIGURAÇÃO</h2> <div class="sectionbody"> <div class="paragraph"> <p>Tudo abaixo desta linha nesta seção, está seletivamente incluído na documentação <a href='/docs/git-config/pt_BR'>git-config[1]</a>. O conteúdo é o mesmo que é encontrado ali:</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>pt_BR/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>pt_BR/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>Parte do conjunto <a href='/docs/git/pt_BR'>git[1]</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>