想象一下,我正在 git repo 上的一个探索性分支上工作,它只有一个提交。我决定很快不需要我的工作,而且我不想创建分支/标签。事实上,我想丢弃这些更改,但以防万一我再次需要它们,我想保存一个补丁。
就本文而言,假设我只有一个更改要存档:
* 040cc7c (HEAD, ExperimentalBranch) This is where the experiment is
* a29ceb7 (master) This is the main branch
...
我提出的归档解决方案如下:
040cc7c
的补丁。ExperimentalBranch
。到目前为止一切似乎都很好,直到几年后我可能想要恢复补丁。它可能会引用不兼容且无法应用的文件/行。为了解决这个问题,我可以查看补丁的父 SHA 并将其应用到那里。
因此我提出的非归档解决方案如下:
a29ceb7
。唯一的问题是,当我创建补丁时,我看到它包含 SHA 040cc7c
,但没有在任何地方提及 a29ceb7
。在我创建补丁后,我可能很难找出 040cc7c
年的父级。此外,因为我多年前删除了分支,所以我不希望有一个 git 命令可以帮助我发现父级。
在创建补丁时,有没有办法确保其父 SHA 也包含在文件中?
我目前的解决方法是重命名补丁以包含父级的 SHA,但这很容易忘记,而且更需要手动操作。
答案 0 :(得分: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