我正在迭代Git分支中的代码功能,该功能最终将通过rebase归结为单个提交/补丁。但是,我仍然想以某种方式将原始提交保留在一个历史文件中,因此我有一份工作记录。最好的方法是什么?
我现在能想到的最好的方法是使用git format-patch master
,然后将生成的所有补丁文件串联在一起,成为一个文件。这种方法的唯一问题是我很懒。我不愿意在git之外做所有的事情。
答案 0 :(得分:1)
git中的分支很便宜。分支只是显示存储库中的提交的文件(当您压缩,合并和删除分支时,我故意跳过了潜在的GC)。
这样做的“ git-方式”只是为了:
git branch feature-backup
git rebase <some_commit>
之后,feature-backup
分支仍将保留您的旧历史记录。您无需将feature-backup
分支推送到远程。它可能只是您的本地分支。
从分支机构进行更改的另一种方法是:
git diff <some_commit>...HEAD > all_commits_in_a_single_file.patch
git rebase <some_commit>
有了它,您将在单个补丁文件中拥有分支上的所有更改。
如果您希望将所有提交分开,则可以使用:
git log --cc <some_commit>...HEAD > all_history_in_a_single_file.txt
最后一个选项将为您提供所有带有提交消息和内容的级联差异。
答案 1 :(得分:0)
另一个解决方案是:
git format-patch --stdout <commit_or_branch> > <patchfile>
这将 <commit_or_branch>
之后的所有提交连接到单个输出中,>
将该输出从 stdout 重定向到名称为 <patchfile>
的补丁文件中。现在可以通过 git am <patchfile>
轻松应用此补丁文件。
我们在我公司使用这种方法处理多提交补丁文件,效果很好。
上述解决方案与 Marcin Pietraszek 提到的这个解决方案有何不同?
git log --cc <some_commit>...HEAD > all_history_in_a_single_file.txt
不同之处在于 Marcin 的解决方案不会生成可供 git am
使用的“补丁”文件。
这里有一个例子来展示它们对于相同的两次提交有何不同。我的方法:
$ git format-patch --stdout origin/master
From 33b83d0314c9c3090a0e27e4c2b46beb58ee1739 Mon Sep 17 00:00:00 2001
From: REDACTED
Date: Wed, 14 Apr 2021 18:21:13 -0600
Subject: [PATCH 1/2] Test 1
---
INSTALL | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/INSTALL b/INSTALL
index fb926ff73b..ae3c3e312d 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
Foundation, Inc.
-
+Hi
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
--
2.25.1
From 88ff375059e12d6053ab43cfdeeefd179e24a2db Mon Sep 17 00:00:00 2001
From: REDACTED
Date: Wed, 14 Apr 2021 18:21:37 -0600
Subject: [PATCH 2/2] test 2
---
INSTALL | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/INSTALL b/INSTALL
index ae3c3e312d..97d6a8f86a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
Foundation, Inc.
-Hi
+Hello
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
--
2.25.1
Marcin 的方法:
$ git log --cc origin/master...HEAD
commit 88ff375059e12d6053ab43cfdeeefd179e24a2db (HEAD -> temp)
Author: REDACTED
Date: Wed Apr 14 18:21:37 2021 -0600
test 2
diff --git a/INSTALL b/INSTALL
index ae3c3e312d..97d6a8f86a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
Foundation, Inc.
-Hi
+Hello
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
commit 33b83d0314c9c3090a0e27e4c2b46beb58ee1739
Author: REDACTED
Date: Wed Apr 14 18:21:13 2021 -0600
Test 1
diff --git a/INSTALL b/INSTALL
index fb926ff73b..ae3c3e312d 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
Foundation, Inc.
-
+Hi
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.