我的仓库中有大量的文件,有时我处理20个文件,我想提交所有文件.但是,我想为每个人添加一条消息.
如何添加所有已更新的文件,并为每个文件添加一条消息,而不必手动为每个文件运行命令?这是否可以进行批量运行并让它提示我为每个添加消息?
Jos*_*Lee 10
(注意:您不应该考虑单个文件,也不应该同时提交十几个不相关的更改.根据逻辑组考虑您的更改.您可以随时提交,或者您可以在每个文件中提交一个文件.时间.但是真的要做一个概念上的改变,提交它,然后继续做其他事情.)
如果您有大量已更改的文件,则可以将它们全部添加并使用git commit,因为编辑器窗口包含已更改的文件列表,您可以将这些文件合并到提交消息中.但是如果你想要提示每一个,你可以循环遍历它们并单独提交它们,然后将它们压缩成一个提交.
写下你的位置; 我们稍后会压扁它:
$ git rev-parse HEAD
57c1df83f140b2dedbdf8a44ee623654d37bd1c3
Run Code Online (Sandbox Code Playgroud)循环遍历已修改的文件(请注意,此处不考虑未跟踪的文件)并单独提交每个文件:
$ for file in $(git ls-files)
> do git add $file
> git commit # Write a commit message for the file.
> # It might be a good idea to use a format like "filename: changes"
> done
Run Code Online (Sandbox Code Playgroud)压扁一切:
$ git rebase -i 57c1df83f140b2dedbdf8a44ee623654d37bd1c3
Run Code Online (Sandbox Code Playgroud)
更改每行,但是从第一个pick到squash,然后保存并退出.
我建议为每一个做一个提交.但是,您可以使用小型shell脚本自动执行该过程.
例如:
#!/bin/sh
PROJECT_DIR=.
for FILE in ${PROJECT_DIR}/*
do
git add ${FILE}
git commit
done
Run Code Online (Sandbox Code Playgroud)
在它的当前形式中,脚本会考虑当前的工作目录PROJECT_DIR.然后它遍历所有文件(与*glob匹配),添加并将它们单独提交到存储库.git会跳过未更改的文件,对于每个更改的文件,编辑器将启动以提示您提交提交消息.
如果系统提示您对您不想提交的文件发表评论,只需保存提交消息文件而不进行任何更改,git将跳过它.