13

以下内容的缩写:我想将提交消息推送到子树,但只有适用于该树的消息。我该怎么做呢?


我有两个项目,MasterSlave. Slave被检出为Master检出到lib/slave的子树,git subtree merge --prefix=lib/slave --squash projects/slave其中projects/slave一个分支Slave被检出:

分支机构:

主项目/从站 → 从站

现在我正在我的master分支上工作,对作为两个项目一部分的文件进行提交,一切都很顺利。现在我想将更改推回Slave

  • git结帐奴隶
  • 混帐???掌握

如果我进行正常的合并,无论是否修改了任何文件,我都会为每个提交给 master 提交提交lib/slave。或者我可以做一个--squash并且只得到一个提交,但是我丢失了日志消息。

那么如何获得适当的日志消息呢?例如,如果我的master日志历史是:

  • 将图像添加到主控
  • 仅从站中修改的文件
  • 仅对 master 进行更多更改
  • master和slave中的修改文件

我希望将其添加到Slave

  • 仅从站中修改的文件
  • master和slave中的修改文件
4

1 回答 1

7

对于您想要的行为,我认为您必须从 中推送Master,我不知道从 中提取子树更改的方法Slave

推送更改:

(in Master)
$ git subtree split --prefix=lib/slave -b split-branch
$ git push <bare Slave repo> split-branch:master
$ git branch -d split-branch
$ cd /path/to/Slave/working/copy
$ git pull  # (now in Slave)

第一个命令基于目录创建一个新的子树,然后将其推送到另一个项目。

理论上,您应该能够直接推送到工作副本,但实际上这对我不起作用。

于 2012-04-13T00:24:12.623 回答