我在项目中使用一个库(比如foo
(,而foo
使用另一个库,比如bar
,我也是foo
和bar
的维护者。
当我更改bar
库中的某些内容时,我会使用适当的提交消息提交bar
存储库中的更改。然而,在foo
和myproject
中复制适当的消息是非常令人沮丧的,所以我只分别用update bar
和update foo
消息提交更改。
如何使用git commit
命令向我推荐最新的子模块提交消息?
这是一种技巧,但这里有一种方法可以使用与最近的子模块提交相同的提交消息来提交超级项目中的子模块更改(假设您使用的是Bash(:
GIT_ALTERNATE_OBJECT_DIRECTORIES=.git/modules/<submodule-name>/objects git commit -C $(git -C path/to/submodule log --format=%h -1)
这在子模块中运行git log
来获得最近一次提交的哈希,然后使用GIT_ALTERNATE_OBJECT_DIRECTORIES
临时添加子模块对象目录作为超级项目的备用目录,以便Git可以读取子模块提交消息并将其用于超级项目提交。
如果bar
在foo
存储库中被声明为子模块,则不需要复制任何内容。
cd /path/to/foo
git submodule add /url/to/bar
cd bar
# add and commit with proper message
git push
cd ..
git add bar
git commit -m "update bar"
重点是:您不需要复制bar提交消息,因为bar
存储库就在foo
中,并且您可以在foo/bar
中直接查看bar
文件历史记录及其原始提交消息。