添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Add / Checkout 檔案部分內容

我們知道可以用 git add <file> 來新增整個檔案,但是如果我們只想要新增檔案部分的內容的話

就可以加上 -p 的參數,同 --patch 來新增部分的內容

我們的目標是,把這次的改動分成三次來提交,分別是 "Add 22", "Add 44" 跟 "Add 66"

使用 git add -p 提交檔案部分的內容

$ git add -p
$ git add --patch   # 同上

Git 一次會出現一個區塊(hunk),問你要做什麼動作,並且列出選項

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

輸入 ? 或是其他不在列子裡面的選項,就會顯示說明

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
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 help

通常只會用到 y, n, s

  • y 就是 yes,要 add 這個 hunk
  • n 就是 no,不要 add 這個 hunk
  • s 把目前的 hunk 再切成更小的 hunk
  • 由於我們這次個改動的位置都太近了,所以用 s 把他再切成更小的 hunk

    他把這次的 hunk 再切成三個小 hunk

    第一部分我們要 22,輸入 y

    其他部分輸入 n

    接著我們用 git status / diff 來查看

    這樣我們就可以只提交 22 的部分

    使用 git checkout -p 回復檔案部分的內容

    這時候我們想把 "66" 修改的部分取消,那就只要在 git checkout 加上參數 -p 或是 --patch

    $ git checkout -p
    $ git checkout --patch      # 同上
    

    就跟 git add -p 一樣,Git 一次會出現一個區塊(hunk),問你要做什麼動作,並且列出選項

    Discard this hunk from worktree [y,n,q,a,d,/,s,e,?]?

    輸入 ? 或是其他不在列子裡面的選項,就會顯示說明

    先用 s,把 hunk 切成兩個小 hunk,再把 "66" 的部分 checkout

    最後將 "44" 提交出去

  • 使用 git add -p 提交檔案部分的內容

  • 使用 git checkout -p 回復檔案部分的內容

  •