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

[PATCH 7/7] fast-forward: add help about merge vs. rebase

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Jul 22, 2021, 00:08 UTC
Message-ID
<20210722000854.1899129-8-felipe.contreras@gmail.com>
In-Reply-To
<20210722000854.1899129-1-felipe.contreras@gmail.com>

Now that we have a locus for merge versus rebase documentation, we can refer to it on the diverging advice.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 Documentation/git-fast-forward.txt | 48 ++++++++++++++++++++++++++++++
 advice.c                           |  4 ++-
 2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-fast-forward.txt b/Documentation/git-fast-forward.txt
index 38c920964f..1989fdec4a 100644
--- a/Documentation/git-fast-forward.txt
+++ b/Documentation/git-fast-forward.txt
@@ -50,6 +50,54 @@ synchronize the two branches.
 
 THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOUR MAY CHANGE.
 
+MERGE OR REBASE
+---------------
+
+The decision to whether merge or rebase depends on the situation and the
+project. Traditionally git has prefered merge over rebase, but that creates a
+new commit, and that's frowned up on some projects, so you can't just simply
+choose to merge blindly.
+
+------------
+    D---C---B---A origin/master
+	 \
+	  X---Y master
+------------
+
+The nature of distributed version control systems make this divergence
+unavoidable; you must decide how to synchronize this divergence.
+
+Should you choose to merge, the two heads (master and origin/master) will be joined
+together in a new commit:
+
+------------
+	  origin/master
+		|
+		v
+    D---C---B---A---M master
+	 \	   /
+	  X---Y---+
+------------
+
+This new commit is called a "merge commit" and has two parents (A and Y).
+
+Rebasing on the other hand rewrites the history:
+
+------------
+	  origin/master
+		|
+		v
+    D---C---B---A---X'---Y' master
+------------
+
+The commits that diverged (X and Y) are rewritten as if they were created on top
+of the new base (A). This creates a linear history, which is cleaner, but some
+people prefer to preserve the original hsitory.
+
+In both cases it's likely you would have to resolve conflicts, the difference is
+that in a merge you would have to do it all at once in one commit, while with a
+rebase you would have to do it on every rewritten commit.
+
 SEE ALSO
 --------
 linkgit:git-merge[1], linkgit:git-rebase[1]
diff --git a/advice.c b/advice.c
index 60de7fbc4e..7f422b05d3 100644
--- a/advice.c
+++ b/advice.c
@@ -337,5 +337,7 @@ void diverging_advice(void)
 		"\n"
 		"or:\n"
 		"\n"
-		"\tgit rebase\n"));
+		"\tgit rebase\n"
+		"\n"
+		"For more information check \"git help fast-forward\".\n"));
 }
-- 
2.32.0.40.gb9b36f9b52
Previous: Felipe ContrerasNext: Philip Oakley
Message 8 of 12 in “fast-forward: new command with advice and documentation”
  1. 0/7 fast-forward: new command with advice and documentationFelipe Contreras, Jul 22, 2021
  2. 1/7 merge: improve fatal fast-forward messageFelipe Contreras, Jul 22, 2021
  3. 2/7 merge: add diverging advice for novicesFelipe Contreras, Jul 22, 2021
  4. 3/7 merge: make the diverging advise configurableFelipe Contreras, Jul 22, 2021
  5. 4/7 merge: split cmd_merge()Felipe Contreras, Jul 22, 2021
  6. 5/7 fast-forward: add new builtinFelipe Contreras, Jul 22, 2021
  7. 6/7 doc: fast-forward: explain what it isFelipe Contreras, Jul 22, 2021
  8. 7/7 fast-forward: add help about merge vs. rebaseFelipe Contreras, Jul 22, 2021
  9. Philip OakleyJul 22, 2021
  10. Felipe ContrerasJul 23, 2021
  11. Philip OakleyJul 23, 2021
  12. Felipe ContrerasJul 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.