让我们说我有两个断开连接的root提交的git repo,由分支master
和new
引用。我想在master
上创建一个提交,使该分支与new
提交相同。就是这样:
* "new" changes <- master
|
* Initial commit
这样
git diff master new
是空的。
master
和new
的合并提交。如何?
git read-tree --reset -u new
git commit -m "new commit"
有关详细信息,请参阅accepted answer和甚至更多信息,请参阅Edmundo's answer及其中的评论。
答案 0 :(得分:2)
Edmundo's answer是执行此操作的最短方式之一。另一种最简单的方法是,在分支master
上,使用git read-tree --reset -u new
后跟git commit
进行新的提交。请注意,git read-tree --reset -u
会破坏正在进行的任何工作(la git reset --hard
),因此请确保您不会先处理某些事情。
不幸的是,所有简短易行的方法都涉及使用一些非真正意义上的人类和管道#34; git commit-tree
或git read-tree
等命令。 git read-tree
超过git commit-tree
的主要优点是后者是一种更严格的束缚和规则类型命令,要求您直接指定树哈希ID(例如,new^{tree}
)而不仅仅是一个解析为树的提交ID。有关new^{tree}
在此处工作的原因,请参阅the gitrevisions documentation。 (当然,您还必须提供master
提交的哈希ID,但只有master
在那里工作。)
仅使用&#34;正常&#34;更长和更丑陋的方式命令为git rm -rf .
后跟git checkout new -- .
,后跟git commit
:基本上&#34;删除所有内容&#34;然后&#34;从新的&#34;中提取所有内容。然后提交。这必须在工作树的顶部运行。