git:提交多个文件但添加消息

时间:2011-03-02 17:18:50

标签: git github

我的仓库中有大量文件,有时我会处理20个文件,我想提交所有文件。但是,我想为每个人添加一条消息。

如何添加所有已更新的文件,并为每个文件添加一条消息,而不必手动为每个文件运行命令?这是否可以进行批量运行并让它为每个人添加一条消息?

3 个答案:

答案 0 :(得分:10)

(注意:您不应该考虑单个文件,也不应该同时提交十几个不相关的更改。请考虑您在逻辑组方面的更改。您可以随时提交,或者您可以提交每个文件一次一个。但是真的要尝试做出一个概念上的改变,提交它,然后转向别的东西。)

如果您有大量已更改的文件,则可以将它们全部添加并使用git commit,因为编辑器窗口包含已更改的文件列表,您可以将这些文件合并到提交消息中。但是如果你想要提示每一个,你可以循环遍历它们并单独提交它们,然后将它们压缩成一个提交。

  • 写下你的位置;我们稍后会压扁这个:

    $ git rev-parse HEAD
    57c1df83f140b2dedbdf8a44ee623654d37bd1c3 
    
  • 遍历已修改的文件(请注意,此处不考虑未跟踪的文件)并单独提交每个文件:

    $ 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
    
  • 压制一切:

    $ git rebase -i 57c1df83f140b2dedbdf8a44ee623654d37bd1c3
    

    更改每一行,但第一行从pick更改为squash,然后保存并退出。

答案 1 :(得分:7)

我建议为每一个做一个提交。但是,您可以使用小型shell脚本自动执行该过程。

例如:

#!/bin/sh

PROJECT_DIR=.

for FILE in ${PROJECT_DIR}/*
do
    git add ${FILE}
    git commit
done

在当前表单中,脚本将当前工作目录视为PROJECT_DIR。然后它遍历所有文件(与* glob匹配),添加并将它们单独提交到存储库。 git会跳过未更改的文件,对于每个更改的文件,编辑器将启动以提示您提交提交消息。

如果系统提示您对您不想提交的文件发表评论,只需保存提交消息文件而不进行任何更改,git将跳过它。

答案 2 :(得分:0)

以上建议的循环变体...
#!/bin/sh
git reset *
PROJECT_DIR=.
for FILE in ${PROJECT_DIR}/*
do
    echo ${FILE}
    git add -f ${FILE}
    git commit -m 'bulk edit'
done

在单独的分支上执行,然后可以对每个提交进行挑选和评论。

  • 不应该添加的文件不应该被挑选到目标分支中。
36d634bfb (HEAD -> 14JUL2021-rebase-begin) bulk edit
8cd0b4549 bulk edit
ed95d7137 bulk edit
0a384dbc1 bulk edit
5822b5351 bulk edit
ab4fe08cc bulk edit
b2ae84d54 bulk edit
ff2544952 bulk edit
...
473dd9017 bulk edit
a2eb707e2 bulk edit
b9dbc34f5 bulk edit
c3ebc2f73 bulk edit
04787f1ab bulk edit
51c6838d6 bulk edit
cee32c368 bulk edit
8f12dbbb7 bulk edit
0ed3d63bf bulk edit
...