git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/2] doc: pull: explain what is a fast-forward

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Jun 23, 2021, 00:48 UTC
Message-ID
<20210623004815.1807-2-felipe.contreras@gmail.com>
In-Reply-To
<20210623004815.1807-1-felipe.contreras@gmail.com>

We want users to know what is a fast-forward in order to understand the default warning.

Let's expand the explanation in order to cover both the simple, and the complex cases with as much detail as possible.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 Documentation/git-pull.txt | 41 ++++++++++++++++++++++++++++++++------
 1 file changed, 35 insertions(+), 6 deletions(-)
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index 5c3fb67c01..142df1c4a1 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -41,16 +41,41 @@ Assume the following history exists and the current branch is
 ------------
 	  A---B---C master on origin
 	 /
-    D---E---F---G master
+    D---E master
 	^
 	origin/master in your repository
 ------------
 
 Then "`git pull`" will fetch and replay the changes from the remote
 `master` branch since it diverged from the local `master` (i.e., `E`)
-until its current commit (`C`) on top of `master` and record the
-result in a new commit along with the names of the two parent commits
-and a log message from the user describing the changes.
+until its current commit (`C`) on top of `master`.
+
+After the remote changes have been synchronized, the local `master` will
+be fast-forwarded to the same commit as the remote one, therefore
+creating a linear history.
+
+------------
+    D---E---A---B---C master, origin/master
+------------
+
+However, a non-fast-forward case looks very different:
+
+------------
+	  A---B---C origin/master
+	 /
+    D---E---F---G master
+------------
+
+If there are additional changes in the local `master`, it's
+not possible to fast-forward, so a decision must be made how to
+synchronize the local, and remote brances.
+
+In these situations `git pull` will warn you about your possible
+options, which are either merge (`--no-rebase`), or rebase (`--rebase`).
+However, by default it will continue doing a merge.
+
+A merge will create a new commit with two parent commits (`G` and `C`)
+and a log message describing the changes, which you can edit.
 
 ------------
 	  A---B---C origin/master
@@ -58,8 +83,11 @@ and a log message from the user describing the changes.
     D---E---F---G---H master
 ------------
 
+Once the merge commit is created (`H`), your local `master` branch has
+incorporated the changes of the remote `master` branch.
+
 See linkgit:git-merge[1] for details, including how conflicts
-are presented and handled.
+are presented and handled, and also linkgit:git-rebase[1].
 
 In Git 1.7.0 or later, to cancel a conflicting merge, use
 `git reset --merge`.  *Warning*: In older versions of Git, running 'git pull'
@@ -248,7 +276,8 @@ version.
 
 SEE ALSO
 --------
-linkgit:git-fetch[1], linkgit:git-merge[1], linkgit:git-config[1]
+linkgit:git-fetch[1], linkgit:git-merge[1], linkgit:git-rebase[1],
+linkgit:git-config[1]
 
 GIT
 ---
-- 
2.32.0
Previous: Felipe ContrerasNext: Felipe Contreras
Message 39 of 40 in “pull: documentation improvements”
  1. 0/2 pull: documentation improvementsFelipe Contreras, Jun 21, 2021
  2. 1/2 doc: pull: explain what is a fast-forwardFelipe Contreras, Jun 21, 2021
  3. Bagas SanjayaJun 22, 2021
  4. Felipe ContrerasJun 23, 2021
  5. Philip OakleyJun 24, 2021
  6. Felipe ContrerasJun 24, 2021
  7. Philip OakleyJun 24, 2021
  8. Felipe ContrerasJun 24, 2021
  9. Philip OakleyJun 24, 2021
  10. Felipe ContrerasJun 24, 2021
  11. Ævar Arnfjörð BjarmasonJun 25, 2021
  12. Felipe ContrerasJun 25, 2021
  13. Ævar Arnfjörð BjarmasonJun 25, 2021
  14. Felipe ContrerasJun 25, 2021
  15. Kerry, RichardJun 25, 2021
  16. Felipe ContrerasJun 25, 2021
  17. Felipe ContrerasJun 25, 2021
  18. 2/2 pull: improve default warningFelipe Contreras, Jun 21, 2021
  19. Alex HenrieJun 21, 2021
  20. Felipe ContrerasJun 21, 2021
  21. Alex HenrieJun 21, 2021
  22. Felipe ContrerasJun 21, 2021
  23. Alex HenrieJun 22, 2021
  24. Felipe ContrerasJun 22, 2021
  25. Elijah NewrenJun 22, 2021
  26. Alex HenrieJun 22, 2021
  27. Elijah NewrenJun 23, 2021
  28. Felipe ContrerasJun 23, 2021
  29. Elijah NewrenJun 23, 2021
  30. Felipe ContrerasJun 23, 2021
  31. Felipe ContrerasJun 23, 2021
  32. Elijah NewrenJun 23, 2021
  33. Felipe ContrerasJun 23, 2021
  34. Alex HenrieJun 24, 2021
  35. Felipe ContrerasJun 24, 2021
  36. Alex HenrieJun 27, 2021
  37. Felipe ContrerasJun 27, 2021
  38. 0/2 pull: documentation improvementsFelipe Contreras, Jun 23, 2021
  39. 1/2 doc: pull: explain what is a fast-forwardFelipe Contreras, Jun 23, 2021
  40. 2/2 pull: improve default warningFelipe Contreras, Jun 23, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.