【问题标题】:How can I make an individual commit message for each file (or even each part of a file) that has changed since the last commit如何为自上次提交以来更改的每个文件(甚至文件的每个部分)制作单独的提交消息
【发布时间】:2016-10-16 21:12:10
【问题描述】:

我的首选例程是一次性暂存并提交所有更改的文件:

git commit -a
# enter commit message via editor

当我的所有更改都相互关联时,这非常有用。但是,当有几个不相关的更改时(即我忘记为每个更改进行提交),它会产生一个冗长的提交消息。在这些情况下,我宁愿为每个文件提供单独的提交消息,或者当文件中有多个不相关的更改时,甚至每次更改都有单独的提交消息。我该怎么做?


注意:这个和How do I commit only some files?的区别

我的问题不同,因为它还解决了文件中的多个提交。

【问题讨论】:

  • 在这种情况下,一般做法是在每次完成其中一项更改时进行提交。
  • @TomasSmagurauskas 是的,当然这是最佳实践。但有时我会忘记承诺。更新了问题以包含这一事实。很棒的评论!

标签: git


【解决方案1】:

如果要添加整个文件,请使用

git add file.txt

如果您在同一文档中有单独的更改,而您希望在单独的提交中进行单独的更改,请使用补丁来选择大块

git add -p

在交互模式下,如果块太大,可以按S

拆分后,如果你发现大块仍然不够精细,请参阅my answer关于手动编辑它以创建精确补丁。

【讨论】:

  • git add -p 效果很好。我刚用过。谢谢!
【解决方案2】:

只需为每个文件分别运行git stagegit commit

git stage file1.txt
git commit
# use editor to type reasons for changing file1.txt

git stage file2.txt
git commit
# use editor to type reasons for changing file2.txt

请参阅Jeff Puckett II's answer 了解如何提交子文件级别的更改。

【讨论】:

    【解决方案3】:

    您还可以使用git add -i 进行交互式暂存,这样您就可以对引入索引的内容进行细粒度控制。在 git add 的帮助输出中有这个选项的完整解释,在https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging 也有一篇很好的文章@

    【讨论】:

    • 交互式登台是一个非常好的功能,我以前不知道。谢谢!
    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2021-06-08
    • 2017-10-12
    • 2017-04-03
    • 2021-09-09
    • 2011-09-14
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多