git:创建另一个断开连接的提交的结果

时间:2017-05-05 19:52:59

标签: git

让我们说我有两个断开连接的root提交的git repo,由分支masternew引用。我想在master上创建一个提交,使该分支与new提交相同。就是这样:

* "new" changes <- master | * Initial commit

这样

git diff master new

是空的。

  • 我不想要masternew的合并提交。
  • 我知道我想要结束的确切状态,所以我不需要弄清楚合并冲突。

如何?

TLDR回答

git read-tree --reset -u new git commit -m "new commit"

有关详细信息,请参阅accepted answer甚至更多信息,请参阅Edmundo's answer及其中的评论。

1 个答案:

答案 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-treegit 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;中提取所有内容。然后提交。这必须在工作树的顶部运行。