在分支合并到分支后重新创建git提交



我失去了对笔记本电脑的访问权限,在那里我只推送了合并的分支(到master上(,但忘记了更新分支本身。

所以我尝试了以下小实验:

$ mkdir g
$ cd g
$ git init
$ echo 1 >> README.md
$ git add README.md 
$ git commit -m"First commit" -- README.md 
$ git checkout -b b1
$ echo 2 >> README.md
$ git commit -m"Second commit" -- README.md 
$ git checkout master
$ git merge b1
$ git checkout b1
$ git reset --hard HEAD~
$ git cherry-pick 365163b00fee76cdc6d3e34b139b0ed42b184437

以上内容不会以相同的方式重新创建commit 365163b00fee76cdc6d3e34b139b0ed42b184437,而是创建另一个commit(d6debaa050c5(。

从现有提交到分支上重新创建提交的正确命令是什么(不能访问reflog(?


对于我的特定需求,我可以检查我是否有以下信息:

$ git show --pretty=fuller 365163b00fee76cdc6d3e34b139b0ed42b184437
commit 365163b00fee76cdc6d3e34b139b0ed42b184437
Author:     Mathieu Malaterre <example@example.org>
AuthorDate: Tue Feb 25 14:02:06 2020 +0100
Commit:     Mathieu Malaterre <example@example.org>
CommitDate: Tue Feb 25 14:02:06 2020 +0100
Second commit
diff --git a/README.md b/README.md
index d00491fd7e5b..1191247b6d9a 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
1
+2
  • 分支b1没有改变,所以父sha1是正确的
  • 提交信息是正确的(消息、作者、提交人和时间戳(

您永远无法完全重新创建相同的提交哈希。虽然散列不同,但内容可以是相同的。

以下信息全部用于确定提交哈希:

  • 提交的源树(分解为所有子树和斑点(
  • 父提交sha1
  • 作者信息(带时间戳(
  • 提交人信息(对,这些是不同的!还有时间戳(
  • 提交消息

(请参阅此答案(。

最新更新