Commit only part of a file in Git

后端 未结 23 2448
一整个雨季
一整个雨季 2020-11-22 05:50

When I make changes to a file in Git, how can I commit only some of the changes?

For example, how could I commit only 15 lines out of 30 lines that have been changed

23条回答
  •  爱一瞬间的悲伤
    2020-11-22 06:32

    You can use git add --patch (or -p for short), and git will begin to break down your file into what it thinks are sensible "hunks" (portions of the file). It will then prompt you with this question:

    Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?
    

    Here is a description of each option:

    • y stage this hunk for the next commit
    • n do not stage this hunk for the next commit
    • q quit; do not stage this hunk or any of the remaining hunks
    • a stage this hunk and all later hunks in the file
    • d do not stage this hunk or any of the later hunks in the file
    • g select a hunk to go to
    • / search for a hunk matching the given regex
    • j leave this hunk undecided, see next undecided hunk
    • J leave this hunk undecided, see next hunk
    • k leave this hunk undecided, see previous undecided hunk
    • K leave this hunk undecided, see previous hunk
    • s split the current hunk into smaller hunks
    • e manually edit the current hunk
    • ? print hunk help

    If the file is not in the repository yet, you can first do git add -N . Afterwards you can go on with git add -p .

    Afterwards, you can use:

    • git diff --staged to check that you staged the correct changes
    • git reset -p to unstage mistakenly added hunks
    • git commit -v to view your commit while you edit the commit message.

    Note this is far different than the git format-patch command, whose purpose is to parse commit data into a .patch files.

    Reference for future: Git Tools - Interactive Staging

提交回复
热议问题