如何让下一个 git commit 在没有合并的情况下从另一个提交中准确地表示项目状态?

bau*_*aur 5 git

我有两个 git 分支:Alpha 和 Beta,我需要在分支 Alpha 上创建下一个提交,以便其项目状态与分支 Beta 上的完全相同。没有合并。

我知道每个 git commit - 在逻辑层面上 - 都是一个完整且不可变的项目状态 + 一些元数据。所以我只需要分支 Alpha 来拥有与 Beta 相同的文件状态。

这将是另一个提交(具有不同的哈希值),并且一个分支提示不会引用另一个。

Elp*_*Kay 5

c=$(git commit-tree Beta^{tree} -p Alpha -m 'foo')
test $c && git update-ref refs/heads/Alpha $c
Run Code Online (Sandbox Code Playgroud)

git commit-tree 创建一个新提交,其树与 Beta 的提示相同,其父项是 Alpha 的提示。

git update-ref 使 Alpha 指向新的提交。

  • 这正是正确的解决方案。(它表明它有助于学习 Git 对象模型,[这真的没有那么复杂](/sf/answers/3141053611/)。)提交是指向树的指针,一组指向父提交的指针和一些元数据。你已经有了这棵树,你需要做的就是构建提交。 (2认同)