我有两个git分支:Alpha和Beta,我需要在分支Alpha上创建下一个提交,以便其项目状态与在Beta Beta上完全相同。没有合并。
我了解每个git提交-在逻辑级别上-是一个完整且不变的项目状态+一些元数据。因此,我只需要分支Alpha即可拥有与Beta一样的文件状态。
这将是另一次提交(具有不同的哈希),并且一个分支提示不会引用另一个。
答案 0 :(得分:4)
但是我相信应该有一个更简单,更优雅的方式。
有一种不涉及补丁的方法:reset --hard
后跟reset --soft
。
首先,标记分支的当前HEAD:我们将需要移动该HEAD ,而无需修改Alpha
,因此我们创建一个名为'{{1 }}',tmp
在哪里。
Alpha
然后我们返回具有正确内容的Beta HEAD提交。
git checkout Alpha
git checkout -b tmp
这会将索引(和工作树)重置为正确的内容,但同时还会移动HEAD。但是,这会移动git reset --hard Beta
头,而不是tmp
头。
将Alpha
HEAD返回到tmp
所在的位置,但不修改索引或工作树(它们表示我们需要进行新的提交)
mAlphaaster
在git reset --soft Alpha
/ Alpha
HEAD的顶部进行新提交,该提交代表正确的内容(Beta HEAD提交内容)。
tmp
最后,强制git commit -m "new commit, image of an old one"
在Alpha
所在的位置:稍后再提交一次。
tmp
现在普通的git branch -M tmp Alpha
git checkout Alpha
git branch -d tmp
就足够了,任何协作者都可以像往常一样简单地拉动,并且仍然可以获得旧的重置内容。
git push
答案 1 :(得分:4)
Player.h
Weapon.h
创建一个新提交,其树与Beta的技巧相同,其父代为Alpha的技巧。
c=$(git commit-tree Beta^{tree} -p Alpha -m 'foo')
test $c && git update-ref refs/heads/Alpha $c
使Alpha指向新提交。