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

Nic*_*ard 7 git github

我的仓库中有大量的文件,有时我处理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)

    更改每行,但是从第一个picksquash,然后保存并退出.


chu*_*ckx 7

我建议为每一个做一个提交.但是,您可以使用小型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将跳过它.