2010-02-01 63 views
9

我喜歡使用git add --patch(以及最近的git add -i)來解開我的提交以及驗證我正在提交的內容是好用使用git以交互方式刪除Hunk add --patch

有一段時間我會碰到一個可能是錯誤日誌語句,一個額外的換行符(通常是擦除前面提到的日誌語句)的大塊 - 我實際上寧願完全刪除它。

我不想登臺,我還想簡單地刪除那個有問題的人,而它正好在我的面前(而不是跳回到我的編輯器並再次嘗試)。我想要對我的工作文件應用更改。

有沒有辦法做到這一點?


我認爲是使用編輯塊功能。

這與下面提出的建議hash一起使我獲得的工作流程略好於我現在的工作流程。

我同意這違反了git add的關注點分離。 OTOH它只是如此方便; P我聽起來像我的老闆;)

+1

目前,答案是 「否」。儘管如此,能夠使用add -i和枚舉hunks會是很好的功能。例如,而不是每個大塊的是/否,您可以生成一系列補丁,然後提交會提示輸入多個日誌消息。或者如果你有'舞臺/無舞臺/藏起來'這樣的選擇,而不是'舞臺/不舞臺'或'藏起來/不要藏起來'(通過存儲-p) – 2010-02-01 14:07:52

+0

是的,我認爲'git add'並不是一種編輯工作樹文件的方式,雖然你是對的,但如果能夠在你身邊的時候照顧它,這將是一件好事。 – Cascabel 2010-02-01 16:12:28

+1

我一直以爲在add -i期間有1-9的選項會很酷。選擇'1'會將第一個提交添加到第一個提交中,依此類推。這將支持您可以將所有這些評論更改放在'1'中的工作流程,即''2中的fizzbuzz特性等,並且您不想在'9'中搜索。一次通過。然後放棄最後一次提交。你必須弄清楚如何獲取提交消息,但它肯定會有用。 – 2014-06-12 20:22:57

回答

5

比使用復位硬HEAD,在提交所有有效的hunk之後,您可以將git checkout文件重置爲當前分支中記錄的內容。這樣它不會影響任何其他文件。

0

你可以添加索引任何你想要的,提交,然後重置硬頭,然後什麼不在索引中丟失。

+0

這不是一個真正的解決方案。 OP提到解除提交,因此可能會在工作樹中進行其他所需的修改,即重置/隱藏會被殺死。 – Cascabel 2010-02-01 16:15:15

+0

他可以做什麼來得到他想要的,而不是他想做什麼,是的。 – hash 2010-02-01 20:15:48

1

有一個徹底的解釋,爲什麼git add不會從Git維護者Junio on the Git mailinglist響應某個特性請求做到這一點。

短版他的替代過程:

# start from N-commit worth of change, debug and WIP 
git stash save -p debug ;# stash away only the debugging aid 
# now we have only N-commit worth of change and WIP 
git stash save -p wip ;# stash away WIP 

git add -p ;# prepare the index for the next commit 
git stash save -k ;# save away the changes for later commits 

git commit