0

想象一下,我正在 git repo 上的一个探索性分支上工作,它只有一个提交。我决定很快就不需要我的工作,并且我不想创建分支/标签。事实上,我想丢弃这些更改,但以防万一我再次需要它们,我想保存一个补丁。

就本文而言,假设我只有一个要存档的更改:

* 040cc7c   (HEAD, ExperimentalBranch) This is where the experiment is
* a29ceb7   (master) This is the main branch
...

我提出的存档解决方案如下:

  1. 创建一个提交补丁040cc7c
  2. 将补丁文件存档在某处以进行长期存储。
  3. ExperimentalBranch从 repo 中删除。

到目前为止,一切似乎都很好,直到几年后我可能想要恢复补丁。它可能会引用不兼容且无法应用的文件/行。为了解决这个问题,我可以查看补丁的父 SHA 并将其应用到那里。

因此,我提出的非归档解决方案如下:

  1. 结帐 SHA a29ceb7
  2. 应用补丁。

唯一的问题是,当我创建补丁时,我看到它包含 SHA 040cc7c,但没有提及a29ceb7任何地方。040cc7c在我创建补丁之后的几年里,我可能很难找出父级。此外,因为几年前我删除了分支,我不希望有一个 git 命令可以帮助我发现父级。

创建补丁时,是否有办法确保其父 SHA 也包含在文件中?


我目前的解决方法是重命名补丁以包含父级的 SHA,但这很容易忘记,而且更手动。

4

1 回答 1

0

我建议不要删除分支,但如果你真的想将补丁存储在其他地方,你可以这样做

git format-patch --base HEAD^ HEAD^

以便将父(基)写入补丁中

例子:

$ git format-patch --base HEAD^ HEAD^ 
0001-test.patch
$ cat 0001-test.patch 
From 057ff8fa3ba485abeb69156e9717570ad483d52c Mon Sep 17 00:00:00 2001
From: Dispeakable me <Dispeakable.me@whatever.io>
Date: Sat, 27 Mar 2021 09:47:23 +0100
Subject: [PATCH] test

---
 test.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/test.cpp b/test.cpp
index 6f4ed1e..1ef4295 100644
--- a/test.cpp
+++ b/test.cpp
@@ -1,4 +1,5 @@
 
+
 #include <list>
 
 class Semaphore {

base-commit: b50a780230e2f3f2be8bf6ad3797de272cafba5c
-- 
2.26.3

你可以检查父sha1:

$ git cat-file -p  HEAD
tree 5c03e768250fe7fe94d8ba0454feae422abd6aac
parent b50a780230e2f3f2be8bf6ad3797de272cafba5c
author Dispeakable me <Dispeakable.me@whatever.io> 1616834843 +0100
committer Dispeakable me <Dispeakable.me@whatever.io> 1616834843 +0100

test
于 2021-03-26T20:28:42.910 回答