git子树无用的合并

时间:2017-11-06 13:57:14

标签: git shell git-subtree

我在项目演示中添加了子树

$ git subtree add --prefix=plugins/plugone plugone master --squash
$ tree .

demo
|___.git
|___plugins
       |___plugone

$ git log --oneline --all --graph --decorate

* 200e94c (HEAD -> master, origin/master) Merge commit 'f9a745bb60b3e5816f918c0ec736714bd362bce7' as 'plugins/plugone'
| \
|  * f9a745b Squashed 'plugins/plugone/' content from commit 5c4a153
* 947ebfe bla bla

到目前为止,我很满意子树。然后我将文件编辑到子树插件并提交并子树推送 ed

* 07b3046 (HEAD -> master, origin/master) plugone append #1
* 200e94c Merge commit 'f9a745bb60b3e5816f918c0ec736714bd362bce7' as 'plugins/plugone'
| \
|  * f9a745b Squashed 'plugins/plugone/' content from commit 5c4a153
* 947ebfe bla bla

我注意到,在我从项目演示git subtree push --prefix=plugins/plugone plugone master更新 plugone 之后,当我运行时

$ git subtree pull --prefix=plugins/plugone plugone master --squash

我希望这可以没有,但我注意到 demo 项目中的新提交:

*   a5ab686 (HEAD -> master) Merge commit 'c8cd6206950dc45196cf6fd1f17e8587a115fee6'
|\
| * c8cd620 Squashed 'plugins/plugone/' changes from 5c4a153..1fd84fe
* | 07b3046 (origin/master) plugone append #1
* |   200e94c Merge commit 'f9a745bb60b3e5816f918c0ec736714bd362bce7' as 'plugins/plugone'
|\ \
| |/
| * f9a745b Squashed 'plugins/plugone/' content from commit 5c4a153
* 947ebfe blabla

这非常令人尴尬,因为这意味着我的同事和我必须在每次 git子树推送之后运行 git子树拉,而IMO并没有多大意义

如何防止这种行为?

1 个答案:

答案 0 :(得分:0)

另一种方法确实存在,但是以更难的方式(更多命令运行)。 我没有使用,而是尝试了 git read-tree / merge ,它给了IMO更好的东西......

优点是我不需要安装额外的工具......

这是一篇有用的文章,详细介绍了如何手动使用子树概念https://delicious-insights.com/en/posts/mastering-git-subtrees/#subtrees-step-by-step